[英]How to join 3 tables with different data between them?
我不太会解释事情,道歉。
我有3个与以下内容相似的表格:
users
id
username
threads
id
title
user_id
lastpost_id
posts
id
content
thread_id
user_id
在列出论坛主题的页面上,我希望显示主题作者和该主题的最后一个帖子作者的用户名,我试图通过一个查询来实现。
我的查询如下所示:
SELECT t.*,u.username FROM threads t
INNER JOIN users u ON t.user_id=u.id
INNER JOIN posts p ON t.lastpost_id=p.id
ORDER BY t.id DESC
第一次加入使我能够获取启动线程的用户ID的用户名。
我不确定第二个联接,它可以为我获取用户ID,但是作为第三个联接,如何从中获取用户名?
如果给它提供不同的别名,则可以多次选择同一张表。 您也可以给字段别名:
SELECT
t.*,
tu.username as threadusername, /* Result field is called 'threadusername' */
p.*,
pu.username as lastpostusername
FROM threads t
INNER JOIN users tu ON t.user_id=tu.id /* thread user */
INNER JOIN posts p ON t.lastpost_id=p.id
INNER JOIN users pu ON p.user_id=pu.id /* post user */
ORDER BY t.id DESC
您可以像这样联接到联接表:
SELECT t.*,u.username,u2.username FROM threads t
INNER JOIN users u ON t.user_id=u.id
INNER JOIN posts p ON t.lastpost_id=p.id
INNER JOIN users u2 ON p.user_id=u2.id
ORDER BY t.id DESC
注意,我还没有时间对其进行测试,但是它应该可以工作(至少在MySQL中)。
我不知道我是否正确,但是根据我的理解,您可以使用内部查询来获取线程ID,然后使用外部查询来根据线程ID获取帖子,并在帖子ID和按用户ID分组。 也加入用户以具有名称。 希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.