【问题标题】:Complex group-by MySQL statement复杂的 group-by MySQL 语句
【发布时间】:2011-10-23 17:26:30
【问题描述】:

我有一个包含以下列的表格:

boxid - nouns - username

1 - w1,w2,w3 - user1
1 - w3,w2,w4 - user2
1 - w1,w8,w5 - user1
2 - w7,w2,w5 - user2

目前我有一个查询,可让我提取以下内容:

SELECT boxid, group_concat(concat(username,":",nouns) SEPARATOR "|") as listn  
FROM table group by boxid;

该查询返回以下内容:

box1 - user1:w1,w2,w3|user2:w3,w2,w4|user1:w1,w8,w5

但是,我想获得同一用户的所有名词而不重复用户(但重复每个用户的单词),类似于以下结果:

box1 - user1:w1,w2,w3,w1,w8,w5|user2:w3,w2,w4

谁能告诉我这是否可以用 mysql 来完成,以及如何?我不知道这个...

(我可以用php做到这一点,但我认为在sql中获得直接结果会更快......)

提前谢谢...

【问题讨论】:

  • 我会非常谨慎地将太多(任何)逻辑放入您的数据库层。使您的代码更难阅读(您正在对数据格式做出假设),更难以测试并将实现与数据库紧密耦合。您是否做过任何测试来验证是否较慢以及它是否会对您的应用程序产生影响。 SQL 中的分组并不像您想象的那么高效...
  • 我明白了。我将比较 PHP 处理和 MySQL 查询执行时间并回发最快的一个。感谢您的评论!

标签: mysql group-by group-concat


【解决方案1】:

试试这个:

SELECT boxid, group_concat(concat(username,":",nouns_list) SEPARATOR "|") as listn  
  FROM 
    (
    SELECT boxid, username, group_concat(nouns)  as nouns_list
        FROM table 
    GROUP BY boxid, username
) a
GROUP BY boxid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2012-09-05
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多