我想知道如何实现这一点。我需要按相关性排序查询,但我不能这样做,我不想使用全文+布尔模式,等等,因为我有很多记录不是以这种方式出现的(50%以上的regs)等等,所以我在循环中创建了一个查询,逐词搜索,在进行查询之前,我自己排除了不相关的单词,两个单词查询过程的结果如下:
SELECT UsrNames, UsrLastNames
FROM user
WHERE 1 AND (UsrNames LIKE '%FirstWord%'
OR UsrLastNames LIKE '%FirstWord%'
OR UsrCI LIKE '%FirstWord%'
OR UsrEmail LIKE '%FirstWord%'
OR UsrRUC LIKE '%FirstWord%'
OR UsrCod LIKE '%FirstWord%'
OR UsrPhone LIKE '%FirstWord%'
OR UsrNames LIKE '%SecondWord%'
OR UsrLastNames LIKE '%SecondWord%'
OR UsrCI LIKE '%SecondWord%'
OR UsrEmail LIKE '%SecondWord%'
OR UsrRUC LIKE '%SecondWord%'
OR UsrCod LIKE '%SecondWord%'
OR UsrPhone LIKE '%SecondWord%') ORDER BY UsrNames ASC
LIMIT 20
OFFSET 0
它现在正在开发中,所以一开始不关心"WHERE 1"。
希望这个伟大的团结能够有所帮助。
这将根据匹配次数排序:
ORDER BY IF(UsrNames LIKE '%FirstWord%', 1, 0)
+ IF(UsrLastNames LIKE '%FirstWord%', 1, 0)
+ IF(UsrCI LIKE '%FirstWord%', 1, 0)
+ IF(UsrEmail LIKE '%FirstWord%', 1, 0)
+ IF(UsrRUC LIKE '%FirstWord%', 1, 0)
+ IF(UsrCod LIKE '%FirstWord%', 1, 0)
+ IF(UsrPhone LIKE '%FirstWord%', 1, 0)
+ IF(UsrNames LIKE '%SecondWord%', 1, 0)
+ IF(UsrLastNames LIKE '%SecondWord%', 1, 0)
+ IF(UsrCI LIKE '%SecondWord%', 1, 0)
+ IF(UsrEmail LIKE '%SecondWord%', 1, 0)
+ IF(UsrRUC LIKE '%SecondWord%', 1, 0)
+ IF(UsrCod LIKE '%SecondWord%', 1, 0)
+ IF(UsrPhone LIKE '%SecondWord%', 1, 0) DESC,
UsrNames ASC
小提琴
IF()
表达式将每个比较转换为一个数字,并将它们相加。如果你愿意,你甚至可以给一些字段一个比1
更高的值,使它们在排名中更重要。