[英]How can I make a SQL query that selects all rows matching a certain string then weights them based on the number of matches
如何創建一個使用LIKE
運算符匹配多個字符串的SQL查詢,然后按它獲得的匹配數對ORDERS
結果進行ORDERS
?
另外,有沒有一種方法可以存儲匹配數,以便以后可以在PHP中使用該數字進行其他計算?
我目前正在使用另一個堆棧溢出答案中的此代碼
SELECT searchtopics_topicid, searchtopics_content FROM searchtopics
WHERE searchtopics_content
LIKE '%string1%' OR searchtopics_content
LIKE '%string2%' OR searchtopics_content
LIKE '%string3%'
ORDER BY
case when searchtopics_content LIKE '%string1%' then 1 else 0 end +
case when searchtopics_content LIKE '%string2%' then 1 else 0 end +
case when searchtopics_content LIKE '%string3%' then 1 else 0 end
DESC
上面的代碼看起來應該可以正常工作,用於存儲您只需將ORDER BY
大小寫邏輯添加到選擇列表中的數字。
SELECT searchtopics_topicid
, searchtopics_content
, case when searchtopics_content LIKE '%string1%' then 1 else 0 end +
case when searchtopics_content LIKE '%string2%' then 1 else 0 end +
case when searchtopics_content LIKE '%string3%' then 1 else 0 end AS hit_ct
FROM searchtopics
WHERE searchtopics_content LIKE '%string1%'
OR searchtopics_content LIKE '%string2%'
OR searchtopics_content LIKE '%string3%'
ORDER BY
case when searchtopics_content LIKE '%string1%' then 1 else 0 end +
case when searchtopics_content LIKE '%string2%' then 1 else 0 end +
case when searchtopics_content LIKE '%string3%' then 1 else 0 end
DESC
在MySQL中,您可以稍微簡化一下:
SELECT searchtopics_topicid
, searchtopics_content
, searchtopics_content LIKE '%string1%'
+ searchtopics_content LIKE '%string2%'
+ searchtopics_content LIKE '%string3%' AS hit_ct
FROM searchtopics
WHERE searchtopics_content LIKE '%string1%'
+ searchtopics_content LIKE '%string2%'
+ searchtopics_content LIKE '%string3%' > 0
ORDER BY searchtopics_content LIKE '%string1%'
+ searchtopics_content LIKE '%string2%'
+ searchtopics_content LIKE '%string3%' DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.