php - 解析2个表的数据

标签 php mysql join

假设我有 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/

相关文章:

php - 如何使用 jQuery 更新带有多个变量的输入框或标签

PHP 插入 PostgreSQL

php - 使用 PHP 将 Jquery 可排序值保存到 mysql 数据库

php - 如何完全按照保存在mysql中的内容显示内容

mySQL JOIN ON NOT()?可能的

mysql - 插入到由主键链接的表中

php - 将当前日期增加 5 天

sql - 修复 mysql 查询以返回子组内的随机行

java - MySQL数据库不更新

python - 如何加入数据框?