select * from abc where xyz like $x or xyz like $y or xyz like $ z
所以,在这个query
中,最大数量为like
的结果会自动列在顶部吗?
如果不是为了完成这项工作需要添加什么?
答案 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)