如何连接 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

在列出论坛主题的页面上,我希望显示主题作者和该主题的最后一位 post 作者的用户名,我试图在单个查询中实现此目的。

我的查询如下所示:

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,但作为第三次加入,我如何从中获得用户名?

您可以像这样加入已加入的 table:

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)。

如果您给它一个不同的别名,您可以多次 select 同一个 table。您也可以给字段别名:

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

我不知道我是否理解正确,但根据我的理解,你可以有一个内部查询来获取线程 ID,然后有一个外部查询来获取 posts 基于线程 id,最大 post id 并按用户 id 分组。还加入用户以拥有名称。希望对您有所帮助。