PHP MySQL组由列中的类似值组成

时间:2014-04-02 07:35:30

标签: php mysql

我尝试开发一种功能,将存储在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

我该怎么做?

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)

虽然每组产生一行(将所有主题连接在一起 - 很容易在脚本中分割)。

这假设您只对引用列中的第一个元素感兴趣(在您给出的示例数据中似乎就是这种情况),并且组号只是一个序列号。