繁体   English   中英

如何联接3个表,它们之间具有不同的数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM