我正在尝试为我的应用构建一个简单的私人消息系统。我设置每条消息的方式都与thread_hash
相关联。彼此相关的邮件具有相同的thread_hash
(回复其他邮件的邮件都具有相同的thread_hash
)
我能够运行一个查询,选择最后从每个组(thread_hash
)输入的行。 我想要完成的是返回另一列,其中包含具有该特定thread_hash
的行数而不进行单独查询
我用我用来生成行的查询创建了一个SQL小提琴:http://sqlfiddle.com/#!2/1d8bd/4
我唯一的信息是用户的ID。我没有thread_hash
,因此必须从ID生成。我已经尝试过一些查询来生成行数,但是我的大脑在这个时候工作不正常。
答案 0 :(得分:1)
我相信你正在寻找像这样的查询
SELECT COUNT(*) AS number_msg, thread_hash, from_user_id, mark_read, subject, SUBSTRING(message, 1, 65) as message, messages.time_stamp
FROM `messages`
WHERE `to_user_id` = '28'
GROUP BY thread_hash
ORDER BY `messages`.`time_stamp` ASC
LIMIT 20
答案 1 :(得分:1)
您可以这样编写查询:
SELECT
thread_hash,
from_user_id,
mark_read,
subject,
SUBSTRING(message, 1, 65) as message,
messages.time_stamp,
cnt
FROM
`messages`
JOIN (SELECT MAX(messages.id) thead_id, COUNT(*) cnt
FROM messages
WHERE messages.to_user_id = 28
GROUP BY thread_hash) thread_head
ON `messages`.`id` = `thread_head`.`thead_id`
WHERE `to_user_id` = '28'
ORDER BY `messages`.`time_stamp` ASC
LIMIT 20
小提琴是here。
但我不确定您是否只需要计算用户28或所有消息的消息。如果需要计算所有消息,可以这样重写子查询:
(SELECT MAX(CASE WHEN messages.to_user_id = 28 THEN messages.id END) thead_id,
COUNT(*) cnt
FROM messages
GROUP BY thread_hash) thread_head
请参阅小提琴here。