2

特定のタグの検索クエリを実行すると、「catalog_tag」テーブルから複数の「タグ」を返すのに問題があります。'catalog.catalog_id'で検索を行うと、内部結合を介して関連するすべてのタグを取得します。特定のタグを検索するときにタグを取得する方法はありますか?

テーブル:

catalog table has: catalog_id|name|post_date

catalog_tag_relationship has: catalog_id|tag_id

catalog_tag has: tag_id|tag_name

SQL:

SELECT catalog_id, name, tag.tag_id, tag.tag_name 
FROM catalog   
INNER JOIN catalog_tag_relationship tagRel ON (tagRel.catalog_id=catalog.catalog_id)  
INNER JOIN catalog_tag tag ON (tagRel.catalog_tag_id=tag.tag_id)  
WHERE (tag.tag_name='dinosaurs') 
4

1 に答える 1

1

改訂:

SELECT
  catalog.catalog_id,
  catalog.name,
  tag.tag_id,
  tag.tag_name
FROM (
  SELECT
    catalog.catalog_id as search_id
  FROM catalog
  INNER JOIN catalog_tag_relationship tagRel
          ON tagRel.catalog_id=catalog.catalog_id
  INNER JOIN catalog_tag tag ON tagRel.catalog_tag_id=tag.tag_id
  WHERE tag_name='dinosaurs'
  GROUP BY catalog.catalog_id
) AS searchList
INNER JOIN catalog ON catalog.catalog_id = search_id
INNER JOIN catalog_tag_relationship tagRel
        ON tagRel.catalog_id=catalog.catalog_id
INNER JOIN catalog_tag tag ON tagRel.catalog_tag_id=tag.tag_id

catalog編集:これは、テーブル から単一のリストを選択した場合と同じ結果を返すはずです。

ステップ1:カタログIDの一致する検索条件のリストを検索します。

ステップ2:ステップ1で見つかったカタログIDのすべてのカタログ情報を入力します。

これにより、カタログエントリごとに複数の行が返されますが、一意のカタログ<->タグマッピングごとに1行のみが返されます。カタログごとに1つの行が必要な場合はGROUP_CONCAT()、そのカタログのすべての異なるタグを表示する必要があります。

于 2012-12-19T21:11:20.010 に答える