按列动态排序结果取决于找到匹配的位置

ess*_*bee 5 sql oracle

我正在从一个表中选择数据,其中3列中的一列与给定的搜索字符串匹配:

SELECT * 
FROM CARS
WHERE MODEL LIKE searchString
OR MANUFACTURER LIKE searchString
OR DESCRIPTION LIKE searchString
Run Code Online (Sandbox Code Playgroud)

但我需要根据列的权重,根据匹配的位置对结果进行排序.也就是说,如果在MODEL列中找到匹配,那么结果在结果中应该比在MANUFACTURER列中找到匹配时更高.加权为1-MODEL 2-MANUFACTURER 3-DESCRIPTION.

所有的帮助非常感谢,谢谢!

OMG*_*ies 4

Oracle 的全文搜索 (FTS) 功能(Oracle Text)不仅速度更快,而且会根据其算法提供排名分数...

SELECT c.*,
            CASE 
                WHEN c.model LIKE searchstring THEN 1
                WHEN c.manufacturer LIKE searchstring THEN 2
                WHEN c.description LIKE searchstring THEN 3
            END AS match_rank
    FROM CARS c
  WHERE c.model LIKE searchstring
        OR c.manufacturer LIKE searchstring
        OR c.description LIKE searchstring
ORDER BY match_rank 
Run Code Online (Sandbox Code Playgroud)

但是你没有提到如果另外两列匹配如何处理排名......