如何在它们之间加入3个不同数据的表?

时间:2015-01-24 21:45:33

标签: php mysql sql join pdo

我对解释事情不太好,道歉。

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

3 个答案:

答案 0 :(得分:1)

如果为其指定不同的别名,则可以多次选择同一个表。您也可以给字段别名:

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

答案 1 :(得分:0)

您可以加入这样的联接表:

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

答案 2 :(得分:0)

我不知道我是否正确使用它,但根据我的理解,你可以有一个内部查询来获取线程ID,然后有一个外部查询来根据线程ID获取帖子,有一个最大值按用户ID发布ID和分组。也加入用户拥有该名称。希望有所帮助。