我有多個關鍵字不同的項目,並且希望在項目的詳細信息頁面上顯示類似項目(基於關鍵字)。通過關鍵字的類似條目
所以一個項目有例如關鍵詞:蘋果,紅色,圓形,新鮮,水果。
我想從數據庫中選擇具有所有/某些/這些關鍵字之一的項目......按照匹配關鍵字(相關性/對應關係)的數量排序。
有沒有辦法在普通的SQL語句中做到這一點?喜歡的東西:
SELECT id FROM images WHERE keywords MAGICSTATEMENTHERE 'apple|red|round|fresh|fruit' ORDER BY MATCHES LIMIT 10
編輯1:
的關鍵字保存在數據庫中的字段像JSON格式的字符串:
["abhauen","abheben","beflügelt","bunt","bunter"]
編輯2:
我已將數據庫結構更改爲保存關鍵字的2個表格。
關鍵字:id | keyword
keyword_relations:keyword_id | image_id
至於我可以看到我只需要keyword_relations表得到類似的圖像image_ids。
我想是這樣的:
SELECT image_id FROM keyword_relations WHERE keyword_id IN(SELECT * FROM keyword_relations WHERE image_id=" . $image->id . ") ORDER BY MATCHES"
但它返回 「操作數應包含1列(S)」
什麼'LIKE'和'或'? – Swellar
假設您已經熟悉規範化,請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-tobe -a-very-simple-sql-query – Strawberry
@Swellar我認爲LIKE和OR會因爲子串排序和所有排列而變得非常詳細。 – mickmackusa