在mysql中,在或类似查询中,是否可以在顶部获得最大匹配结果?

时间:2012-08-27 14:45:45

标签: mysql

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

所以,在这个query中,最大数量为like的结果会自动列在顶部吗?

如果不是为了完成这项工作需要添加什么?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

更多的事情,LIKE用于模式匹配。而IN用于在集合中查找值。

答案 3 :(得分:0)

我不会使用LIKE,除非您需要与通配符运算符(例如%_)进行字符串比较。如果您要将xyz完全 $ x,$ y或$ z进行比较,请使用IN运算符,如下所示:

SELECT * FROM abc WHERE xyz IN ($x, $y, $z)