2017-02-01 6 views
2

DISTINCTでGROUP_CONCATを使用しようとしていますが、別の列で区別を実行しています。 MySQLは、出力1とは異なる列のGROUP_CONTACTでDISTINCTを使用します。

GROUP_CONCAT(DISTINCT tags.tag SEPARATOR ' ') as tags" 

しかし、タグは異なるIDと同じ文字である可能性があり、私はこのような何かをする必要があります:たとえば を、私はこれをやっている

GROUP_CONCAT(DISTINCT(tags.tag_id) tags.tag SEPARATOR ' ') as tags" 

しかし私ができますこれについて、何か考えを見つけることはありませんか?

SIMPLIFIEDテーブルデータの例は、(複数の結合とテーブルをモデルとSQL要求が多く複雑である):
アイテムテーブル:
のitem_id、タイトル、...
1 、スミス、...
2、ボブ、...
...

タグ表:
TAG_IDタグは、トロント、1、...
3、トロント、1、モントリオール、1、...
2、
1 ...、
をITEM_ID ...
4、新ニューヨーク、2、...
...

MySQLのクエリ:

... 
SELECT items.item_id, items.title, 
GROUP_CONCAT(DISTINCT tags.tag_id SEPARATOR ',') as tag_ids", 
GROUP_CONCAT(DISTINCT tags.tag SEPARATOR ' ') as tags" 
LEFT JOIN tags ON items.item_id = tags.item_id 
GROUP BY items.item_id 
.. 

期待される結果:
item1.title = "スミス"
item1.tag_ids = "1 2 3"
item1.tags = "モントリオールトロント"
...

実際の結果を:
item1.title = "スミス"
item1.tag_ids = "1 2 3"
item1.tags = "モントリオールトロント" < - BECAUSE DISTINCT
のプロダクトのCOUNTの不一致...

注: 私は私はあなたが欲しいものを100%わからないが、私が正しいならば、あなたは明確なtag_idsして、対応するタグをしたい

SELECT WHERE tags.item_id IN(SELECT ...) 
+1

良いコンテキストの説明ですが、どういう疑問がありますか。サンプルデータと期待される出力を見せてください。 \t [** How-to-Ask **](http:// stackoverflow。com/help/how-to-ask) \t \t [** START **](http://spaghettidba.com/2015/04/24/how-to-post-at)に最適な場所です-sql-a-public-forum /)を使用して質問品質を改善し、より良い回答を得る方法を学びます。 –

+0

実際には、いくつかのデータと予想される出力を表示する必要があります。私はあなたの問題を理解するのに苦労しています。 –

+0

私の質問を変更し、すべての説明を削除し、期待される結果と実際の結果を持つデータのみを入れてください – NaturalBornCamper

答えて

0

のようなサブクエリを避けたいです名前は、 'montreal toronto toronto'はあなたのためにうまくいくでしょう:

SELECT item_id, 
     GROUP_CONCAT(tag_id SEPARATOR ' ') AS tag_ids, 
     GROUP_CONCAT(tag SEPARATOR ' ') AS tags 
FROM 
    (SELECT items.item_id AS item_id, 
      tags.tag_id AS tag_id, 
      tags.tag AS tag 
    FROM items 
    JOIN tags ON tags.item_id = items.item_id 
    GROUP BY 1, 
       2) AS distinct_groups 
GROUP BY item_id 
+0

アイデアを提供してくれてありがとうJan!皆さんの理解を助けるために私の質問を完全に書き直しました。あなたが書いたことはうまくいくようですが、私たちのフレームワークはサブクエリjankyを作るので、サブクエリを避けたいと思います。 – NaturalBornCamper