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

それは複雑な使用シナリオです...

リソースをフィルタリングし、それらをワンステップでランク付けしたい....次の汚いハックアラウンドを試してください;)

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などのワイルドカード演算子を使用して文字列比較を行う必要がない限り、使用しません。正確な$x、$y、または $z と比較しようとしている場合は、次のように演算子を使用します。%_xyzIN

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