我有以下查詢:按最強LIKE訂購SQL?
SELECT * FROM table_name
WHERE (col_1 LIKE '%$keyword%'
OR col_2 LIKE '%$keyword%'
OR col_3 LIKE '%$keyword%')
AND .... <some optional filters> ...
是有戰略排序基於最相關的結果?
我有以下查詢:按最強LIKE訂購SQL?
SELECT * FROM table_name
WHERE (col_1 LIKE '%$keyword%'
OR col_2 LIKE '%$keyword%'
OR col_3 LIKE '%$keyword%')
AND .... <some optional filters> ...
是有戰略排序基於最相關的結果?
當你談論「相關「,你真的想自然語言搜索,這是MySQL full-text searches支持。語法與正常的不同,如查詢,您需要向該表添加特殊索引,但按相關性排序可能是這種方式。
這裏的MySQL如何計算的相關性(從鏈接):
當MATCH()在WHERE子句中使用,如在前面的例子中,返回的行會自動與關聯性最高的第一排序。相關性值是非負浮點數。零相關意味着沒有相似性。相關性的計算基於行中單詞的數量,該行中唯一字的數量,集合中單詞的總數以及包含特定單詞的文檔(行)的數量。
要create a full-text index on an existing table,使用FULLTEXT修改:
CREATE FULLTEXT INDEX index_name
ON table_name (col1, col2, col3)
然後你就可以這樣執行查詢檢索的相關性順序結果:
SELECT * FROM table_name
WHERE MATCH (col1,col2,col3)
AGAINST ('keyword' IN NATURAL LANGUAGE MODE);
你不能。您正在要求RDBMS按最下面的「LIKE」列降序排列結果。例如,MySQL使用所謂的FULLTEXT索引來執行此操作。
如果你的意思是COL_1比COL_2更相關的等等,那麼:
select *
,case when col_1 like '%$keyword%' then 1
when col_2 like '%$keyword%' then 2
when col_3 like '%$keyword%' then 3
end as [priority]
from table_name
where col_1 like '%$keyword%'
or col_2 like '%$keyword%'
or col_3 like '%$keyword%'
order by [priority]
如果您用最柱匹配,則意味着:
select *
,(case when col_1 like '%$keyword%' then 1 else 0 end) +
,(case when col_2 like '%$keyword%' then 1 else 0 end) +
,(case when col_3 like '%$keyword%' then 1 else 0 end) as [priority]
from table_name
where col_1 like '%$keyword%'
or col_2 like '%$keyword%'
or col_3 like '%$keyword%'
order by [priority] desc
通過 「最相關」 ,你的意思是'col_1'上的匹配優先於'col_2'上的匹配,等等? – Wiseguy
什麼構成最相關的結果? – codewaggle
您的意思是「過濾」而不是「排序」? – Sebas