我尝试开发一种功能,将存储在mysql表中的消息分组。这里的每一列都引用了所有父母。它看起来像这样:
Subject Message Id References
----------------------------------------
Message 1 1 1
Message 2 2 1,2
Message 3 3 1,2,3
Message 4 4 4
我想在这里做的是根据他们的推荐对所有消息进行分组。这个表结构是php imap邮件的结果。引用指向父级。因此,我想根据参考文献对消息进行分组。我想在前端显示分组的消息,而不是显示单个消息。我想迭代组并向前端用户显示这样的内容。
Groups Subject Count
---------------------------------------------
Group 1 Message 1 3
Message 2
Message 3
Group 2 Message 4 1
我该怎么做?
答案 0 :(得分:1)
我最近能找到你想要的东西: -
SELECT CONCAT('Group ', Sub1.group_order), GROUP_CONCAT(Subject), COUNT(*)
FROM Messages
INNER JOIN
(
SELECT DISTINCT SUBSTRING_INDEX(References, ',', 1) AS iRef, @Order:=@Order+1 as group_order
FROM Messages, (SELECT @Order:=0)
ORDER BY iRef
) Sub1
ON SUBSTRING_INDEX(Messages.References, ',', 1) = Sub1.iRef
GROUP BY CONCAT('Group ', Sub1.group_order)
虽然每组产生一行(将所有主题连接在一起 - 很容易在脚本中分割)。
这假设您只对引用列中的第一个元素感兴趣(在您给出的示例数据中似乎就是这种情况),并且组号只是一个序列号。