Может кто-нибудь, пожалуйста, помогите мне в том, как я могу добавить несколько запросов к одному запросу с помощью 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
Как я могу добавить эти три запроса к одному запросу?
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, что это может показаться), и не исключать строки
Вы изучали использование UNION? По правде говоря, может быть более эффективный способ сделать это - это было первое, что пришло в голову.