объединение и возможные подзапросы

#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;