#mysql #sql
#mysql #sql
Вопрос:
У меня есть 3 таблицы: user
, ‘user_friends’ и ‘blog_post’
Схема аналогична следующей:
user
id | username
-------------------
1 | jim
-------------------
2 | mary
-------------------
3 | george
-------------------
4 | julie
user_friends
user_id | friend_id
----------------------
1 | 2
----------------------
2 | 3
----------------------
2 | 4
blog_posts
id | title | user_id
------------------------------
1 | test_1 | 1
------------------------------
2 | test_2 | 2
------------------------------
3 | test_3 | 3
------------------------------
4 | test_4 | 4
Хорошо, чтобы вы могли видеть, что каждый пользователь сделал сообщение в блоге. У пользователей есть «друзья». Что я хочу сделать, это отобразить сообщения в блоге каждого пользователя.
Итак, если я хочу видеть сообщения друзей Джимса, в нем должно отображаться сообщение Мэри о test_2. Если я хочу видеть сообщения друзей Мэри, в нем должны отображаться сообщения Джорджа и Джули test_3 и test_4
Есть ли простой способ сделать это? Могу ли я использовать подвыборки?
Большое спасибо
Ответ №1:
Да, вы можете использовать подвыборку. Что-то вроде этого должно работать :
SELECT * FROM blog_posts WHERE user_id in
(SELECT friend_id FROM user_friend WHERE user_id=1)
Комментарии:
1. Сработало как шарм! Я знал, что я на правильном пути! Спасибо
Ответ №2:
Может быть так просто (вариант с ОБЪЕДИНЕНИЕМ):
SELECT bp.*
FROM user_friends uf
JOIN blob_posts bp ON bp.user_id = uf.friend_id
WHERE uf.user_id = my_id
Ответ №3:
Select *
From blog_posts
Where user_id in
(Select friend_id
From user_friends
where user_id = 1);
число в конце может быть любым идентификатором пользователя, который вы ищете.
Ответ №4:
Вы можете использовать В
SELECT * FROM blog_posts WHERE user_id IN (
SELECT friend_id FROM user_friends WHERE user_id = X)
Ответ №5:
SELECT bp.*
FROM blog_posts bp
INNER JOIN user_friends uf ON bp.user_id = uf.friend_id
INNER JOIN user u ON u.id = uf.user_id
WHERE u.username = "jim"
Ответ №6:
Попробуйте выполнить этот запрос:
SELECT bp.title
FROM blog_posts bp
JOIN user_friends uf ON (bp.user_id = uf.friend_id)
WHERE uf.user_id = 1;