从多对多查询

时间:2013-12-08 15:15:46

标签: php mysql database database-design

我有以下表格:

用户(身份证,姓名,电子邮件) 关注(id,follower_id,following_id) 发布(id,user_id,title,body)

现在跟随意味着我(user_id = 23)跟随另一个用户(user_id = 12),可能还有一些用户。

我想查询一下它可以显示我关注的所有人发布的所有帖子。

是否可以使用单个查询?

2 个答案:

答案 0 :(得分:0)

但是,当然要确保你有合适的索引,否则可能需要一段时间!

SELECT `user`.`id` AS `user_id`, `user`.`name`, `post`.`id` AS `post_id`, `post`.`title`, `post`.`body`
FROM `follow`
JOIN `user` ON `user`.`id`=`follow`.`following_id`
JOIN `post` ON `post`.`something...` # You're missing an "author" field in your posts table!
WHERE `follow`.`following_id` = 23

答案 1 :(得分:0)

你没有在问题中提到它,但是你必须有一个像poster_id这样的列来识别你在Post表中发帖子的人。有了这个,你可以做到:

SELECT p.* 
FROM posts p
INNER JOIN follow f ON p.poster_id = f.following_id
WHERE f.follower_id = 23;

这将为您提供用户23后面的所有帖子。