mysql - SQL 查询未给出所需结果

标签 mysql sql laravel

我有两张 table

  1. tbl_message

    id | user_id | user_name |message | society_id
    1 -- 252----- Shubham----- HeyHi--------- 3
    2 -- 252----- Shubham----- HeyHi--------- 3
    3 -- 250----- Rahul---------- HeyHi--------- 3
    4 -- 251----- Sachin--------- HeyHi--------- 3
    
  2. tbl_submessage

    id | post_id | user_id | submessage
    1-----1----------252---------Hi-
    2-----1----------252---------Hi-
    3-----1----------253---------Hi-
    4-----1----------253---------Hi-
    5-----1----------253---------Hi-
    6-----2----------254---------Hi-
    7-----2----------254---------Hi-
    


我必须计算表 tbl_submessage 中 post_id = tbl_message 中消息 ID 的子消息数量。
基本上,tbl_message 包含论坛帖子,tbl_submessage 包含该帖子内完成的对话

我尝试了以下查询。

SELECT tk.*,COUNT(tp.id) FROM tbl_message  tk,tbl_submessage  tp WHERE tk.society_id=3 and  tk.id=tp.post_id;


此查询正在返回
编号 |用户 ID |用户名|留言|社会_id | COUNT(tp.id)
1 -- 252----- 舒巴姆 ----- HeyHi--------- 3 -----------7


我想要的是

id |用户 ID |用户名|留言|社会_id | COUNT
1 -- 252----- 舒巴姆 ----- 嗨嗨 --------- 3---------5
2 -- 252----- 舒巴姆 ----- 嗨嗨 --------- 3---------2
3 -- 250-----拉胡尔----------嘿嘿--------- 3---------0
4 -- 251----- 萨钦---------嘿嘿--------- 3---------0

请帮我查询。

最佳答案

您的查询存在一些问题:您需要将联接更改为左联接以获取没有子消息的用户,并添加 GROUP BY 以按用户提供结果。试试这个:

SELECT tk.*,  COUNT(tp.id) 
FROM tbl_message tk
LEFT JOIN tbl_submessage tp
ON tp.post_id = tk.id
WHERE tk.society_id=3
GROUP BY tk.id

关于mysql - SQL 查询未给出所需结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50212354/

相关文章:

mysql - 使用多个 ID 更新数据透视表

java - 通过 Regex 表达式的 Hibernate 查询过滤器

mysql - 当定义 ON DELETE RESTRICT 时,是否有任何方法可以使用查询在临时基础上使用 ON DELETE CASCADE 功能?

mysql - 适合初学者的 ASP 分页

php - 如何在PHP Mysql中实现只有一级的深度评论系统

javascript - 解析小文件性能

java - 即使PreparedStatement仅使用一次,ResultSet关闭后也不允许执行操作

sql - 基于总和更新

php - Laravel 5.1 bcrypt 和登录

laravel - 在 Laravel 中创建自定义 ID(主键)