В настоящее время я пытаюсь выбрать список сообщений от людей, которые являются друзьями и/или за ними следует текущий пользователь. Однако я столкнулся с проблемой, когда добавляю во второй оператор для following
таблицы.
SELECT * FROM login, threads WHERE login.id=threads.poster_id AND deleted=0 AND login.id
IN ((SELECT CASE WHEN second_id=? THEN first_id ELSE second_id END FROM friends WHERE first_id=? OR second_id=?)
AND (SELECT CASE WHEN follower=? THEN following ELSE follower END FROM following WHERE follower=?))
ORDER BY threads.posted DESC LIMIT 20
Просто используйте два явных условия IN
с двумя подзапросами:
SELECT *
FROM login
INNER JOIN threads
ON login.id = threads.poster_id
WHERE
deleted = 0 AND
(login.id IN (SELECT CASE WHEN second_id=? THEN first_id ELSE second_id END
FROM friends WHERE first_id=? OR second_id=?) AND
login_id IN (SELECT CASE WHEN follower=? THEN following ELSE follower END
FROM following WHERE follower=?))
ORDER BY
threads.posted
DESC LIMIT 20;
Это может исправить ошибки синтаксиса и даже дать вам результат, который вы ожидаете, но я также чувствую, что мы сможем немного очистить запрос. Образцы данных пройдут долгий путь в этом направлении.
WHERE
.