私は異なるキーワードを持つ複数のアイテムを持っており、アイテムの詳細ページに類似アイテム(キーワードベース)を表示したいと考えています。キーワードで類似した商品
したがって、1つのアイテムは、apple、red、round、fresh、fruitなどのキーワードを持ちます。
これらのキーワードのすべて/いくつか/ 1つを含むアイテムをデータベースから選択して、一致するキーワードの数(関連性/対応性)でソートします。
プレーンなSQL文でこれを行う方法はありますか?以下のような何か:
SELECT id FROM images WHERE keywords MAGICSTATEMENTHERE 'apple|red|round|fresh|fruit' ORDER BY MATCHES LIMIT 10
EDIT 1:
キーワードはのようなJSON形式の文字列としてデータベースフィールドに保存されます。
["abhauen","abheben","beflügelt","bunt","bunter"]
EDIT 2:
Iデータベース構造をキーワードが保存されている2つのテーブルに変更しました。
キーワード:id | keyword
keyword_relations:keyword_id | image_id
限り、私は唯一類似イメージのimage_idsを取得するためにkeyword_relationsテーブルを必要と見ることができるように。
私はこのような何か試してみました:
SELECT image_id FROM keyword_relations WHERE keyword_id IN(SELECT * FROM keyword_relations WHERE image_id=" . $image->id . ") ORDER BY MATCHES"
をしかし、それはwhere inの使用に関する
何? – Swellar
正規化に慣れている場合は、https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-beを参照してください。 -a-very-simple-sql-query – Strawberry
@Swellar私はLIKEとORが、部分文字列の順序付けとすべての置換を考えるとひどく冗長になると思います。 – mickmackusa