База данных Mysql, помогите с таблицами - PullRequest
0 голосов
/ 14 июня 2011

Я пытался разобраться с запросом mysql весь день :( любая помощь будет отличной.

Я пытаюсь связать три вещи. пункты меню, группы пунктов меню и уровни привилегий.

Итак, у меня есть пять таблиц:

Таблица меню с элементами id (уникальный)

У меня есть групповая таблица идентификатор группы (уникальный)

и таблица menuIdGroupId идентификатор_группы menuId

У меня есть таблица привилегий привилегированный (уникальный)

и группыPrivlstable idGroups idPrivilege

Таблица привилегий и таблица групп на самом деле являются только списками групп и привилегий. Таблица привилегированных групп и таблица groupMenu предназначены для объединения таблиц, чтобы связать все.

Я перепробовал множество комбинаций для запроса, но ни одна из них не работает:

SELECT *
    FROM `menuIdGroupId`
       JOIN `menuItems` ON menuItems.id = menuIdGroupId.menuId
       JOIN `groupsPrivls` ON groupsPrivls.idGroups = menuIdGroupId.groupId
    WHERE groupsPrivls.idPrivilege = '1'
    LIMIT 0 , 30

если groupsPrivls равен

idGroups   idPrivilege
7          0
7          1
1          1
1          2
1          4
13         5
9          2
12         1
1          5
1          6
7          2
7          4
7          5
7          6

и menuIDGroupId

groupId   menuId
1         30
7         29
1         31
1         29
1         33
7         33
4         33
1         32
7         30
7         31

id     text
33     button 3     
32     button 2     
31     button 1     
30     Church   
29     About 

Результат

groupId   menuId    id    text           idGroups     idPrivilege
7         29        29    About Us       7            1
7         33        33    button 3       7            1
7         30        30    New to Church  7            1
7         31        31    button 1       7            1
1         30        30    New to Church  1            1
1         31        31    button 1       1            1
1         29        29    About Us       1            1
1         33        33    button 3       1            1
1         32        32    button 2       1            1

Как видите, я получаю повторяющиеся записи и не понимаю, почему. Я предполагаю, что я не настроил это восемь. Любая помощь будет отличной.

Спасибо

Alan

PS извините, формат такой грязный!

1 Ответ

0 голосов
/ 14 июня 2011

У вас есть фундаментальная проблема: плохая модель. Обе вещи, которые вас интересуют в моделировании (вместе): деревья . Я бы посоветовал вам взглянуть либо на деревья смежности, либо на вложенные множества деревьев. Это предполагает, что вы хотите, чтобы пункты меню содержали пункты меню внутри, а также для групп.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...