2011-08-10 6 views
1

私は、次の列を持つテーブルがある:複雑なグループでのMySQLの文

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

そのクエリ:

boxid - nouns - username 

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

と私は私が次抽出することができますクエリを持っている現在では

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でやってもらえますか?私は

+0

私はあなたのデータベース層にあまりにも多くの(任意の)ロジックを置くのは非常に慎重になるだろう。コードを読みにくく(データの形式について前提)、テストを難しくしたり、実装をデータベースに緊密に結合したりすることができます。遅いかどうか、実際にアプリケーションに影響があるかどうかを検証するためのテストを行いましたか? SQLでのグループ化は、あなたが考えるかもしれないほど効率的ではありません... – Caps

+0

私は参照してください。私はPHP処理とMySQLクエリの実行時間を比較し、最も速いものをポストバックします。ご意見ありがとうございます! –

答えて

3
...事前に

おかげで(私はPHPでこれを行うことができますが、私は、SQLでの直接の結果を得ることは速くなると思う...)...

をこの見当がつかない

これを試してみてください:

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 
+0

ありがとう、完璧な作品! –