2012-04-18 11 views
2

したがって、1つのテーブルから別の値を選択する必要がありますが、同じクエリ内の別のテーブルの関連値をすべて結合する必要があります。mysqlはconcatを持つテーブルから別のテーブルの結果を選択します

基本的に私はToxi TagSystemスキーマを次http://forge.mysql.com/wiki/TagSchema#Toxi

三つのテーブルの多対多マッピングの間です。

すべての挿入された値(ドキュメント)を各行に1つずつ表示する必要がありますが、そのファイルのすべてのタグをカンマで区切っている列の1つを表示したいとします。今の

私は

SELECT 
    docs.id AS id, 
    docs.orig_file AS orig_file, 
    docs.date_sent AS date_sent, 
    tags.tag_name AS alltags 
FROM documat AS docs 
LEFT JOIN documat_file2tag AS f2t ON f2t.doc_id = docs.id 
LEFT JOIN documat_tags AS tags ON tags.id = f2t.tag_id 

を持っている。しかし、特定のdocs.idがタグよりも多くを持っている場合は、この行を繰り返しています。私はそれぞれの行にしたいと思い、最終的な結果は次のとおりです。

| ID | orig_file | date_sent | alltags | 

望ましい結果の例では:

| X | example_value.pdf | 2012-03-23 10:14:05 | tag_ex_1, tag_ex_2, etc | 
+1

あなたが副選択とGROUP_CONCATを使用することはできますか?私が右にsubselectする必要がある3つのテーブルがあるので、http://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field – ovolko

+0

@ovolkoを参照してください。どうやって? SQLは本当に私の弱点です:P – eduardev

+0

okはsubselectが必要でもないようです:) – ovolko

答えて

6

グループの連結方式:

SELECT 
    docs.id AS id, 
    docs.orig_file AS orig_file, 
    docs.date_sent AS date_sent, 
    GROUP_CONCAT(distinct tags.tag_name) AS alltags 
FROM documat AS docs 
LEFT JOIN documat_file2tag AS f2t ON f2t.doc_id = docs.id 
LEFT JOIN documat_tags AS tags ON tags.id = f2t.tag_id 
GROUP BY docs.id 
+0

私は必要です;)それを編集し、それは受け入れ、感謝:) – eduardev

関連する問題