SQL Query没有给出所需的结果

时间:2018-05-07 10:45:16

标签: mysql sql laravel

我有两张桌子

  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-
    

  3. 我必须计算表 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 | user_id | user_name | message | society_id | COUNT(tp.id)
            1 - 252 ----- Shubham ----- HeyHi --------- 3 ----------- 7


    我想要的是

    id | user_id | user_name | message | society_id | COUNT
            1 - 252 ----- Shubham ----- HeyHi --------- 3 --------- 5
            2 - 252 ----- Shubham ----- HeyHi --------- 3 --------- 2
            3 - 250 ----- Rahul ---------- HeyHi --------- 3 --------- 0
            4 - 251 ----- Sachin --------- HeyHi --------- 3 --------- 0

    请帮我查询。

1 个答案:

答案 0 :(得分:1)

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