如何连接 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 分组。还加入用户以拥有名称。希望对您有所帮助。
我不太会解释事情,抱歉。
我有 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 分组。还加入用户以拥有名称。希望对您有所帮助。