MySQL выполняет несколько запросов с OR - PullRequest
0 голосов
/ 12 сентября 2009

Может кто-нибудь помочь мне с тем, как я могу добавить несколько разных запросов к одному запросу с помощью ИЛИ?

У меня есть сообщения, которые я хочу показывать только пользователям, которым разрешено его просматривать, ИЛИ группам, которым разрешено его просматривать, ИЛИ каждый раз.

SELECT p.*, c.name, cb.categoryId FROM Posts AS p
LEFT JOIN CategoryBindings AS cb ON cb.postId = p.id
LEFT JOIN Categories AS c ON c.id = cb.categoryId
LEFT JOIN UserBindings AS ub ON ub.postId = p.id
WHERE ub.userId = 1

SELECT p.*, c.name, cb.categoryId FROM Posts AS p
LEFT JOIN CategoryBindings AS cb ON cb.postId = p.id
LEFT JOIN Categories AS c ON c.id = cb.categoryId
LEFT JOIN GroupPostBindings AS gpb ON gpb.postId = p.id
LEFT JOIN GroupBindings AS gp ON gp.groupId = gpb.groupId
WHERE gp.userId = 1

SELECT p.*, c.name, cb.categoryId FROM Posts AS p
LEFT JOIN CategoryBindings AS cb ON cb.postId = p.id
LEFT JOIN Categories AS c ON c.id = cb.categoryId
WHERE p.public = 1

Как я могу добавить эти три запроса к одному запросу?

Ответы [ 2 ]

3 голосов
/ 12 сентября 2009
SELECT p.*, c.name, cb.categoryId FROM Posts AS p
LEFT JOIN CategoryBindings AS cb ON cb.postId = p.id
LEFT JOIN Categories AS c ON c.id = cb.categoryId
LEFT JOIN UserBindings AS ub ON ub.postId = p.id
LEFT JOIN GroupPostBindings AS gpb ON gpb.postId = p.id
LEFT JOIN GroupBindings AS gp ON gp.groupId = gpb.groupId
where p.public = 1 or ub.userId = 1 or gp.userId = 1

должно работать, при условии, что ваши объединения всегда будут возвращать значение (может показаться 0 или 1) и не исключать строки

1 голос
/ 12 сентября 2009

Вы изучали использование UNION ? Возможно, существует более эффективный способ сделать это - это было только первое, что пришло на ум.

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