select * from abc where xyz like $x or xyz like $y or xyz like $ z
那么,在这种query
情况下,具有最大数量的结果like
会自动列在顶部吗?
如果不是,需要添加什么来完成?
select * from abc where xyz like $x or xyz like $y or xyz like $ z
那么,在这种query
情况下,具有最大数量的结果like
会自动列在顶部吗?
如果不是,需要添加什么来完成?
布尔 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
这是一个复杂的使用场景......
你想过滤资源并在一个步骤中对它们进行排名......试试这个肮脏的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
你是什么意思maximum matched result at the top
?顺便说一句,您可以进一步将查询重写为,
select *
from abc
where xyz IN ($x, $y, $z)
更重要的LIKE
是,用于模式匹配。whileIN
用于在集合中查找值。
LIKE
除非您需要与通配符运算符(例如%
or )进行字符串比较,否则我不会使用_
。如果您尝试与xyz
精确的$x、$y 或 $z 进行比较,请使用如下IN
运算符:
SELECT * FROM abc WHERE xyz IN ($x, $y, $z)