这种算法也叫做分值查询,将查询的匹配度赋值一个数字.最后这个值进行排序
我的数据表里面有两个字段title, short_name
这里有一个查询排序需求:
1. 当查询字符串完全等于short_name, 那么此条记录排最前面.
2 其次等于title
3 其次 %short_name.
4 其次 %title
5 其次 %short_name%
6 其次 %title%
以上面的6条需求对查询结果进行排序
$string = "我的查询字符串";
// 将查询的值给一个叫orderme的值.然后使用这个值来进行排序. Then 后的结果为此字段的值
$result = db_query("
SELECT
*, CASE
WHEN short_name='{$string}' THEN 1
WHEN title='{$string}' THEN 2
WHEN short_name LIKE '{$string}%' THEN 3
WHEN title LIKE '{$string}%' THEN 4
WHEN short_name LIKE '%{$string}%' THEN 5
WHEN title LIKE '%{$string}%' THEN 6
END AS orderme
FROM mytable
WHERE short_name LIKE '%{$string}%'
OR
title LIKE '%{$string}%'
ORDER BY orderme ASC LIMIT 20");