我正在尝试为我的应用程序构建一个简单的私人消息传递系统。我设置每个消息的方式都有与之关联的thread_hash。彼此相关的消息具有相同的thread_hash(答复其他消息的消息都具有相同的thread_hash

我能够运行一个查询,从每个组(thread_hash的组)中选择最后输入的行。我要完成的是返回具有该特定thread_hash的行数的另一列,而无需进行单独的查询

我已经使用用于生成行的查询创建了一个SQL Fiddle:http://sqlfiddle.com/#!2/1d8bd/4

我仅有的信息是用户的ID。我没有thread_hash,因此必须从ID生成。我尝试使用一些查询来生成行数,但是此时我的大脑无法正常工作。

最佳答案

您可以通过以下方式编写查询:

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

关于mysql - MySQL:连接出现的行数和结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17258328/

10-14 15:11