0

長年のリスナー、初めての発信者。私はこの問題を数時間調査してきましたが、特定の問題に対する答えを見つけることができませんでした.

製品に関連するデータベースに 3 つのテーブルがあります。

  • tbl_item (with item_id, item_name, etc...) -- 基本アイテムテーブル
  • tbl_item_term (term_idおよび を使用term_name) -- 説明用語
  • tbl_item_term_map (item_idおよび を使用term_id) -- 項目に用語を割り当てます

各アイテムには、複数の用語が関連付けられています。私がやろうとしているのは、表示されているアイテムに関連するすべてのアイテムを、その用語に基づいて表示することです。

例えば:

item1 has term1, term2, term3 assigned to it<br>
item2 has term2, term4, term6 assigned to it<br>
item3 has term4, term5, term6 assigned to it

各商品ページでは、関連商品をご紹介したいと思います。この場合、item3 は term4 を共有しているため、item2 を関連製品として表示します。

left-joining-three-tables の質問に対する役立つ回答をいくつか見つけましたが、この特定の状況に適合するものはありません。前もって感謝します!

クリス

編集

これは、私のテーブル/フィールド名を反映するように変更された、Sajuna によって提供されたコード スニップです。

SELECT ti.item_name FROM tbl_item ti  
INNER JOIN tbl_item_term_map ttm on ttm.item_id = ti.item_id
INNER JOIN tbl_item_term tt on tt.term_id = ttm.term_id
WHERE tt.term_id IN (

    SELECT tt.term_name FROM tbl_item ti 
    INNER JOIN tbl_item_term_map ttm on ttm.item_id = ti.item_id
    INNER JOIN tbl_item_term tt on tt.term_id = ttm.term_id
    WHERE ti.item_id = 2536;

 );

ネストされたクエリだけを実行すると、期待どおり、ID に割り当てられた 5 つのフィールドが返されます。しかし、すべてを実行すると、エラーが発生します (#1064 - SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、9 行目の近くで使用する正しい構文を確認してください)。これが「本番用ではない」という意味ですか?

4

1 に答える 1