2015-04-14 6 views
0

Это мои таблицы, которые мне нужны для получения данных из этих таблиц. Каждый из них может пользователь при многих типах groups, например 2, 3, 4Выберите один раз для повторной записи

1)groups 
|gp_id|gp_name|gp_status| 
------------------------------------- 
| 1 | Admin | Active | 
| 2 | R&D | Active | 
| 3 | Sales | Active | 
| 4 | IT | Active | 

2)modules   (FK of table parent_modules) 
|mod_id| mod_name|  pmod_id   | 
--------------------------------------------- 
| 1 | name1 |   1   | 
| 2 | name2 |   1   | 
| 3 | name3 |   2   | 
| 4 | name4 |   3   | 
| ... | name... |   3   | 
mod_id = 5,6,7.. and so on 

3)parent_modules 
|pmod_id| mod_name  |pmod_status| 
----------------------------------------- 
| 1 | Contact Us  | Active | 
| 2 | Account Settings | Active | 
| 3 | System Settings | Active | 

4)group_details 
     (FK of table groups) (FK of table modules) 
|gpd_id | gp_id   |  mod_id   | base_gpd_rule_view/edit/update/insert | 
----------------------------------------------------------------------- 
| 1 |   3   |   1   |  on  | 
| 2 |   3   |   2   |  on  | 
| 3 |   3   |   3   |    | 
| 4 |   3   |   4   | 
| 5 |   3   |   5   |  on  | 
| 6 |   3   |   6   | 
| 7 |   3   |   7   | 
| 8 |   4   |   6   | 
| 9 |   4   |   7   |  on  | 
| 10 |   4   |   8   |  on  | 

Я должен выбрать только один раз дублированных результатов group_details и это результат, который я хочу.

 
| gp_id   |  mod_id   | 
---------------------------------------------- 
|   3   |   1   | 
|   3   |   2   | 
|   3   |   3   | 
|   3   |   4   | 
|   3   |   5   | 
|   3   |   6   | 
|   3   |   7   | 
|   4   |   8   | 

До сих пор это то, что я сделал в своем запросе, но он показывает мне дубликат записи.

//get user groups store in database. example group in database:2, 3, 4 
$GroupList = explode(", ", $UserDetail['u_group']); 
foreach($GroupList as $a) 
{ 
    $getParentModuleSQL = base_executeSQL("SELECT * FROM parent_modules WHERE pmod_status<>'Disable'"); 
    $count1 = base_num_rows($getParentModuleSQL); 

    while($ParentModuledata_row = base_fetch_array($getParentModuleSQL)) 
    if ($count1!= 0) 
    { 
     base_executeSQL("SELECT gp.gp_id AS ID FROM group_details AS gp, modules AS m WHERE m.pmod_id =". $ParentModuledata_row['pmod_id'] ." AND gp.gp_id=". $a ." AND gp.mod_id = m.mod_id" AND (base_gpd_rule_view='on' OR base_gpd_rule_add='on' OR base_gpd_rule_edit='on' OR base_gpd_rule_delete='on') GROUP BY gp.mod_id); 
    } 
} 
+0

Почему вы не хотите видеть '4 | 6' и '4 | Они, кажется, не дубликаты? или вы имеете в виду только там, где mod_id является дубликатом? в каком случае, какой gp_id вы хотите увидеть для mod_id? или вы хотите видеть все gp_id для mod_id, но только в одной строке? –

+0

в основном то, что мне нужно сделать, это что-то вроде этого. [check here] (http://a1javascripts.com/wp-content/uploads/2012/12/Drop-Menu.jpg), тогда как parent_modules - это страница категории, а модули - суб-навигационная ссылка. – Sollo

+0

Я понимаю. но 'mod_id' 6 имеет' gp_id' 3 и 4. как вы хотите решить, какой 'gp_id' выбрать? –

ответ

0

Я все еще не понимаю ваши проблемы. если вы хотите, чтобы все модули имели доступ к gp_id - select * from group_details where gp_id = XX. Если вам нужен только один модуль, select * from modules.

+0

Это нормально .. Запрос, который я написал выше, перечисляет категорию, отмеченную как checked (base_gdp_rule_view = on) , Моя проблема в том, что когда я проверил все разрешения в группе 3, он перечислит список ** Системные настройки **. но когда я сделал то же самое, что и в группе 4, он перечислит 2 ** Системные настройки ** в моей основной категории, но мне нужно отобразить только один раз. – Sollo

+0

вы можете создать несколько примеров таблиц и данных на sqlfiddle.com? что поможет много –

+0

[Пример демонстрации] (http://sqlfiddle.com/#!9/657f4c/1) Вы можете проверить здесь, нужно ли мне создавать и другие таблицы? – Sollo