如何连接 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 分组。同时加入用户以获得该名称。希望有帮助。