首页 > 解决方案 > SQL 查询没有给出想要的结果

问题描述

我有两张桌子

  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中消息的子消息的数量。
基本上 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 | 用户名 |消息 | 社会ID | COUNT(tp.id)
1 -- 252----- Shubham----- HeyHi--------- 3 -----------7


我想要的是

编号 | 用户 ID | 用户名 |消息 | 社会ID | 计数
1 -- 252----- 舒巴姆----- HeyHi--------- 3----------5
2 -- 252----- 舒巴姆--- -- 嘿嘿--------- 3---------2
3 -- 250----- 拉胡尔---------- 嘿嘿------ --- 3---------0
4 -- 251----- 萨钦--------- HeyHi--------- 3------ ---0

请帮我查询。

标签: mysqlsqllaravel

解决方案


您的查询存在几个问题:您需要将联接更改为左联接以获取没有子消息的用户并添加 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

推荐阅读