0
select * from abc where xyz like $x or xyz like $y or xyz like $ z 

那么,在这种query情况下,具有最大数量的结果like会自动列在顶部吗?

如果不是,需要添加什么来完成?

4

4 回答 4

3

布尔 TRUE 和 FALSE 表达式可以被视为整数 1 和 0。因此,您可以简单地对这些值求和,并按该值排序:

SELECT * FROM abc
WHERE xyz LIKE $x OR xyz LIKE $y OR xyz LIKE $z
ORDER BY ((xyz LIKE $x) + (xyz LIKE $y) + (xyz LIKE $z)) DESC
于 2012-08-27T14:52:07.283 回答
2

这是一个复杂的使用场景......

你想过滤资源并在一个步骤中对它们进行排名......试试这个肮脏的hackaround;)

select * from abc where xyz like $x or xyz like $y or xyz like $ z ORDER BY ( xyz like $x + xyz like $y + xyz like $z) DESC
于 2012-08-27T14:48:45.067 回答
0

你是什​​么意思maximum matched result at the top?顺便说一句,您可以进一步将查询重写为,

select * 
from abc 
where xyz IN ($x, $y, $z)

更重要的LIKE是,用于模式匹配。whileIN用于在集合中查找值。

于 2012-08-27T14:48:20.313 回答
0

LIKE除非您需要与通配符运算符(例如%or )进行字符串比较,否则我不会使用_。如果您尝试与xyz精确$x、$y 或 $z 进行比较,请使用如下IN运算符:

SELECT * FROM abc WHERE xyz IN ($x, $y, $z)
于 2012-08-27T14:51:51.897 回答