【发布时间】:2009-04-12 05:34:33
【问题描述】:
我有这个查询,我需要在名为“likes”的表中包含另一个联接,其中updates.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"
【问题讨论】:
-
您声称是按updates.time 排序的,但结果中没有“时间”字段 - 是什么?
-
另外,拥有三个表中每一个的完整列列表会很有帮助。如果有一个 users.id 列和一个 updates.id 列,您可能只会看到 users.id,即使连接是在 updates.id 上(非唯一列名的主要问题之一)。跨度>
-
是的,非唯一的列名引起了我的困惑。我想通了,并用解决方案更新了原始帖子。谢谢!