我有三个MYSQL表
Requests - request_id, request_msg, user_id, request_datetime
Responses - response_id, request_id, response_msg, user_id, response_datetime, readflag
Users- user_id, user_email, user_name
readflag = 0 or 1
我想获取用户的所有请求,其中此请求的至少1个响应未读,此请求的总响应计数和未读响应计数。
答案 0 :(得分:2)
试试这个:
SELECT
a.request_id,
COUNT(*) AS total_response_count,
COUNT(b.request_id) AS unread_response_count
FROM
Requests a
LEFT JOIN
Responses b ON a.request_id = b.request_id AND b.readflag = 0
GROUP BY
a.request_id
HAVING
COUNT(b.request_id) > 0
在这里,我们LEFT JOIN关于的关系的Responseses表,以及,其中消息未读(b.readflag = 0
)。这使得具有读取响应的所有行都具有b.response_id
的NULL值。由于COUNT()
不会将NULL计入其计算中,因此我们仅过滤至少有1个未读响应(HAVING COUNT(b.request_id) > 0
)的请求。
因为我们LEFT JOINed,所有响应都被保留,读取或未读...所有读取行将包含b.request_id
的NULL。 COUNT(*)
基本上依赖于行的存在,因此它为我们提供了消息的总数。然后COUNT(b.request_id)
为我们提供了未读消息的计数,因为它只会将非NULL值计入其计算中。
答案 1 :(得分:0)
尝试这样的事情:
SELECT COUNT(`res`.`response_id`) AS `total`, COUNT(`res`.`readflag`='0') AS `unread`
FROM `Requests` AS `req`
LEFT JOIN `Responses` AS `res` ON `req`.`request_id`=`res`.`request_id`
WHERE `unread`>1 AND `req`.`user_id`='[PLACE_USER_ID_HERE]'