0

アイテムにタグシステムを実装しようとしています。タグは tags というテーブルに含まれており、項目をタグにリンクする別のテーブル tagitem があります。アイテムには複数のタグを付けることができます。商品を出品する際に、タグを全て一覧表示したい。私の質問は、1 つのクエリでこれを行う方法はありますか? アイテムの結果をタグ テーブルに結合すると、1 つのアイテム (複数のタグに対応) に対して複数のレコードが取得されるか、タグによるグループを含めると、1 つのレコードが取得されますが、最初のタグのみが取得されます。

もう 1 つの方法は、タグを取得するためだけに 2 番目のクエリを実行することですが、これは非効率的です。

Item table
Id | name

Tag table
Id | tag

Tagitem table
Id|itemid|tagid

Php

$sql = "select i.*,ti.*,t.*
FROM 'items' i
LEFT JOIN 'tagitem' ti
ON i.id=ti.itemid
LEFT JOIN  'tag' t
On ti.tagid=t.id
WHERE i.id='2'";

//returns multiple records

$sql.="group by i.id";

//returns only first tag

任意の提案のための Thx。

4

1 に答える 1

1

GROUP_CONCATを試してください。

タグをサブクエリとして選択し、それらをグループ化して配列を形成できるはずです。

SELECT
    Item.name,
    GROUP_CONCAT (Tags.tag SEPERATOR ',') AS tags
FROM
    Item
    LEFT JOIN Tagitem ON Tagitem.itemid = Item.Id
    LEFT JOIN Tag ON Tagitem.tagus = Tag.Id
WHERE
    Item.Id = 2

それを試してみて、何が起こるか教えてください。テーブル構造を少し推測しているので、微調整が必​​要になる場合があります。

于 2012-10-16T20:51:04.580 に答える