通过在字符串中出现一组关键字对sql结果排序

通过在字符串中出现一组关键字对sql结果排序,sql,relevance,Sql,Relevance,对于每一行,我想得到与未定义的关键字数量相比的每个描述的相关性。我知道“THEN+1”不起作用,但我希望得到这个结果(…有一个数字(从每行0开始),对于存在的每个关键字递增) 因此,如果描述包含“关键字1”和“关键字2”,则该行的相关性描述应为2。您可以使用单独的子句进行此操作,并将它们添加到一起: SELECT *, ((CASE description LIKE '%keyword1%' THEN 1 else 0 end) + (case descriptio

对于每一行,我想得到与未定义的关键字数量相比的每个描述的相关性。我知道“THEN+1”不起作用,但我希望得到这个结果(…有一个数字(从每行0开始),对于存在的每个关键字递增)


因此,如果描述包含“关键字1”和“关键字2”,则该行的相关性描述应为2。

您可以使用单独的子句进行此操作,并将它们添加到一起:

SELECT *,
       ((CASE description LIKE '%keyword1%' THEN 1 else 0 end) +
        (case description LIKE '%keyword2%' THEN 1 else 0 end) +
        . . .
       ) as relevance_description
FROM (...)
ORDER BY relevance_description DESC;
在某些数据库中,布尔值被视为整数,因此您可以只写:

SELECT *,
       ((description LIKE '%keyword1%') +
        (description LIKE '%keyword2%') +
        . . .
       ) as relevance_description
FROM (...)
ORDER BY relevance_description DESC;

谢谢,我得到了同样的问题,并在Laravel中直接在生成器中解决了它。万一有人需要。。
SELECT *,
       ((description LIKE '%keyword1%') +
        (description LIKE '%keyword2%') +
        . . .
       ) as relevance_description
FROM (...)
ORDER BY relevance_description DESC;