База данных объединяется с тремя таблицами, одна из которых является таблицей категорий / тегов - PullRequest
0 голосов
/ 16 июля 2010

У меня есть три таблицы базы данных - одна, содержащая единицы измерения, одна, содержащая категории этих единиц, и одна, содержащая права пользователя.

Если пользователь может получить доступ к категории, он может получить доступ к любым единицам в категории.

Я пытаюсь создать запрос, который будет получать список единиц, к которым им разрешен доступ. Пока у меня есть очень неловкий запрос, который возвращает дубликаты, и я немного застрял, и сегодня пятница, и я хочу домой!

Вот мои таблицы:

UnitCategory

categoryid     unitid

Единица

id             name

UnitCategoryUser

unitid         userid         categoryid
               - can be null  - can be null

Спасибо

Ответы [ 3 ]

1 голос
/ 16 июля 2010

Я подозреваю, что UnitCategoryUser используется в качестве универсальной таблицы для отношений между пользователями, категориями и единицами, так что единицы записываются как принадлежащие категориям в записях, где идентификатор пользователя равен нулю, и пользователи могут получить доступ к единицам, даже если у них нет доступа к своим категориям, где categoryid равен нулю.

Было бы также возможно, чтобы единицы принадлежали к нескольким категориям, а пользователи могли регистрироваться как имеющие доступ к одним и тем же единицам времени, когда пользователь может получить доступ к нескольким категориям (каждая из которых может получить доступ к одному и тому же модулю). ) и когда пользователю был предоставлен доступ к устройству без доступа к категории, затем впоследствии был предоставлен доступ к категории.

Следующий запрос должен вернуть все единицы для указанного пользователя:

select distinct u.name
from unit u 
join unitcategory uc on u.id = uc.unitid
join unitcategoryuser ucu on uc.category_id = ucu.categoryid
where ucu.userid = YourUserID
union
select distinct u2.name
from unit u2
join unitcategoryuser ucu2 on u2.id = ucu2.unitid
where ucu2.userid = YourUserID
1 голос
/ 16 июля 2010
SELECT U.Name
FROM UnitCategoryUser UCU
JOIN UnitCategory UC ON UC.categoryid = UCU.categoryid
JOIN Unit U ON U.id = UC.UnitId
WHERE UCU.UserId = YourUserId

Разве это не возвращает ваши правильные данные?Я могу что-то упустить: x

0 голосов
/ 16 июля 2010

выберите unit.name из unit, unitcategory, unitcategoryuser, где unit.id = unitcategory.unitid и unitcategory.categoryid = unitcategoryuser.categoryid и unitcategoryuser.userid = "Я"

Что-то подобное?

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