假设我有 3 张 table 。 “用户”、“主题”和“回复”。
“主题”和“回复”表确实有一列“user_id”,它引用“用户”表上的“id”。 “replies”表还有一列“topic_id”,它引用“topics”上的“id”。另请想象每个主题都有 1 个回复。
现在,我想获取所有主题并解析两个表的用户名,因此输出应包含“topic_username”和“reply_username”。
我知道如何选择主题的用户名,但如何为主题和回复表选择用户名?
谢谢
更新的代码:
SELECT
t.*,
t_users.username as topic_user,
last_reply.user_id as last_reply_user_id,
r_users.username as last_reply_username,
last_reply.replies_count,
ORDER BY IFNULL(last_reply.created_at,t.created_at DESC
FROM
topics as t
left join users as t_users on t_users.id = t.user_id
left join ( select r.*,count(r.id) as replies_count from (select * from replies order by id desc) as r group by r.topic_id ) as last_reply on last_reply.topic_id = t.id
left join users as r_users on r_users.id = last_reply.user_id
最佳答案
试试这个
SELECT
t.*,
t_users.name as topic_user,
r_users.name as reply_user
FROM
topics as t
left join replies as r on r.topic_id=t.id
left join users as t_users on t_users.id = t.user_id
left join users as r_users on r_users.id = r.user_id
如果有 1:1 的主题和回复,这会很有效,如果您有 1 到多个回复,那么您最好按主题 id 进行分组并按组连接获取用户名
版本 2(获取回复计数和最后回复用户)
SELECT
t.*,
t_users.name as topic_user,
last_reply.user_id as last_reply_user_id,
r_users.name as last_reply_username,
last_reply.replies_count,
IFNULL(last_reply.created_at,t.created_at) as last_update
FROM
topics as t
left join users as t_users on t_users.id = t.user_id
left join ( select r.*,count(r.id) as replies_count from (select * from replies order by id desc) as r group by r.topic_id ) as last_reply on last_reply.topic_id = t.id
left join users as r_users on r_users.id = last_reply.user_id
ORDER BY IFNULL(last_reply.created_at,t.created_at) DESC
关于php - 解析2个表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33592455/