3

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

基本的に私はToxiTagSystemスキーマhttp://forge.mysql.com/wiki/TagSchema#Toxiに従っています

3つのテーブル間の多対多のマッピング。

また、挿入されたすべての値(docs)を各行に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 |
4

1 に答える 1

7

グループ連結:

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
于 2012-04-18T08:40:56.047 に答える