У меня возникают проблемы при разработке правильного использования Inner Join и нацеливании на другие таблицы для нескольких условий в рамках одного запроса MySQL.
По сути, я создаю небольшой фолловер для моего веб-сайта, который выводит новые сообщения от любого пользователя, на которого вы подписаны.
Таблица сообщений:
id | user_id | message | timestamp
Следуйте таблице:
id | follower_id | following_id
Мой запрос до сих пор:
SELECT posts.*
FROM posts
INNER JOIN follows
ON posts.user_id = follows.following_id
WHERE follows.follower_id = 1
ORDER BY id DESC limit 10
Как я могу добавить условие в:
1.) Больше или меньше, чем идентификатор (posts.id)
2.) Укажите, что он также может быть опубликован с идентификатором пользователя 1 (Мои собственные сообщения)
Конечно, 1 будет заменена переменной, поэтому она будет динамической для текущего сеанса пользователя.
Любые предложения здесь, становится действительно запутанным этим.
Чтобы добавить условие «1.) Больше или меньше идентификатора (posts.id)», вы можете просто добавить условие в запрос в конце предложения WHERE с помощью оператора AND. Само условие (используя больше, чем в качестве примера):
posts.id > $n
где $ n — это целое число.
Чтобы добавить условие «2.) Укажите, что оно также может быть опубликовано с идентификатором пользователя 1 (Мои собственные сообщения)», вы можете использовать оператор ИЛИ. Ключевое слово из предоставленного вами объяснения условия — «также», поэтому мы будем использовать оператор OR вместо оператора AND. Само условие:
posts.user_id = $my_user_id
где $ my_user_id — это user_id пользователя, который делает запрос или просматривает фид.
Предполагая, что вы хотите оба условия 1 а также условие 2 должно быть выполнено вместе с ранее существовавшим условием «follow.follower_id = 1», вы хотите сгруппировать условия, используя скобки. Это может помочь вам записать ваши условия и то, как вы хотите быть сгруппированы на понятном языке. Например:
Показать все сообщения, сделанные мной или кем-то, за кем я следую, и которые также имеют идентификатор больше / меньше, чем данное число.
Эти условия могут быть представлены в SQL с помощью:
WHERE (follows.follower_id = $my_user_id
OR posts.user_id = $my_user_id)
AND posts.id > $n
Завершенный запрос будет:
SELECT posts.*
FROM posts
INNER JOIN follows
ON posts.user_id = follows.following_id
WHERE (follows.follower_id = $my_user_id
OR posts.user_id = $my_user_id)
AND posts.id > $n
ORDER BY id DESC
LIMIT 10;
Вы можете добавить OR
пункт к ON
присоединиться к пункту для posts.user_id = 1
и вы также можете положить AND
на WHERE
пункт для posts.id > ###
по мере необходимости.