我对解释事情不太好,道歉。
我有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,但如何获得用户名,作为第三次加入?
答案 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和分组。也加入用户拥有该名称。希望有所帮助。