長年のリスナー、初めての発信者。私はこの問題を数時間調査してきましたが、特定の問題に対する答えを見つけることができませんでした.
製品に関連するデータベースに 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 行目の近くで使用する正しい構文を確認してください)。これが「本番用ではない」という意味ですか?