天天看点

mysql case when 排序_Mysql Case when 查询排序

这种算法也叫做分值查询,将查询的匹配度赋值一个数字.最后这个值进行排序

我的数据表里面有两个字段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");