MYSQL一对多加入

时间:2009-04-12 05:34:34

标签: sql mysql

我有这个查询,我需要在名为“likes”的表中包含另一个连接,其中up​​dates.id = likes.update_id。此联接将有0个或更多匹配。

"SELECT * FROM users 
INNER JOIN updates ON users.remote_id=updates.owner_id 
ORDER BY updates.status_time DESC LIMIT 50"

这可能相当简单,但我无法找到任何此类查询的示例。

情况基本上是我正在显示一个项目列表。我在users表上进行连接以获取创建每个项目的用户。我还需要在“喜欢”的表格上加入,以显示喜欢每个项目的0+人。


编辑:我的解决方案

好的,这是使用GROUP_CONCAT成功加入并组合重复结果(因为每次更新有多个“喜欢”)。

"SELECT   users.*,updates.update_id,updates.content,updates.status_time,
GROUP_CONCAT(likes.liker SEPARATOR ',') AS liked_by 
FROM updates 
LEFT OUTER JOIN likes ON updates.update_id = likes.update_id 
JOIN users ON users.remote_id = updates.owner_id 
GROUP BY updates.update_id 
ORDER BY updates.status_time DESC 
LIMIT 200"

2 个答案:

答案 0 :(得分:2)

SELECT * FROM users 
LEFT OUTER JOIN updates ON users.remote_id=updates.owner_id
INNER JOIN likes ON <join condition here>
ORDER BY updates.time DESC LIMIT 50

这会起作用吗?

如果没有,你能澄清你的问题到底是什么吗?查询是否有效?

答案 1 :(得分:1)

如果你有1到n的关系,你应该使用LEFT JOIN,我的意思是如果只有1个用户而且很多人喜欢.user_id你应该用以下方式做事

“SELECT * FROM users LEFT JOIN updates ON(users.remote_id = updates.owner_id)ORDER BY updates.time DESC LIMIT 50”

这样您就可以获得某个用户的所有更新:)

欢呼声

相关问题