我正在尝试用多个搜索词组成一个SQL SELECT查询。但我希望结果按照匹配的数量排序。
例如,让搜索字符串为“红绿蓝”。我希望结果包含所有这三个单词,然后是结果,其中包含两个单词,最后只有一个单词匹配。
SELECT
*
FROM
table
WHERE
(col LIKE '%red%') OR
(col LIKE '%green%') OR
(col LIKE '%blue%')
ORDER BY
?????
提前致谢!
答案 0 :(得分:5)
ORDER BY
(
CASE
WHEN col LIKE '%red%' THEN 1
ELSE 0
END CASE
+
CASE
WHEN col LIKE '%green%' THEN 1
ELSE 0
END CASE
+
CASE
WHEN col LIKE '%blue%' THEN 1
ELSE 0
END CASE
) DESC
如果您的数据库供应商有IF
,您可以使用它而不是CASE
(例如,对于Mysql,您可以编写
IF (col LIKE '%red% , 1,0) + IF(....'
答案 1 :(得分:1)
您使用的是什么平台?如果是SQL Server,那么听起来像全文搜索结构将是你最合适的。
答案 2 :(得分:0)
如果您使用的是MySQL: SQL Server Freetext match - how do I sort by relevance