MySQL выполняет несколько запросов с OR

0

Может кто-нибудь, пожалуйста, помогите мне в том, как я могу добавить несколько запросов к одному запросу с помощью OR?

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

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
Лучший ответ
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, что это может показаться), и не исключать строки

  • 0
    Оно работало завораживающе. Я считаю, что все объединения заставили меня подумать, что это будет гораздо сложнее, чем на самом деле, и тогда это было так легко, и я чувствую себя глупо даже для того, чтобы задать вопрос. Спасибо.
1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню