MySQL Query с Inner Join и несколькими условиями

У меня возникают проблемы при разработке правильного использования 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

Решение

Чтобы добавить условие «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;
1

Другие решения

Вы можете добавить OR пункт к ON присоединиться к пункту для posts.user_id = 1 и вы также можете положить AND на WHERE пункт для posts.id > ### по мере необходимости.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector