Postgres OR検索を一致順で表示
OR検索一致順でソート
全件表示。
pgdb=# SELECT * FROM foo;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
100001 | リンゴ | 1 | t
100002 | バナナ | 1 | f
100003 | ネコ | 2 | t
100004 | イヌ | 2 | f
(4 行)
foo_nameがバナナまたはfoo_categoryが1 いずれかの条件にマッチする結果を表示。
pgdb=# SELECT * FROM foo WHERE foo_name = 'バナナ' OR foo_category = 1;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
100001 | リンゴ | 1 | t
100002 | バナナ | 1 | f
(2 行)
SQL
SELECT * FROM foo
WHERE
foo_name = 'バナナ' OR foo_category = 1 --条件
ORDER BY
foo_name = 'バナナ' DESC, foo_category = 1 DESC; --ソート
foo_nameがバナナまたはfoo_categoryが1 いずれかの条件にマッチする結果を一致順で表示。
pgdb=# SELECT * FROM foo WHERE foo_name = 'バナナ' OR foo_category = 1 ORDER BY foo_name = 'バナナ' DESC, foo_category = 1 DESC;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
100002 | バナナ | 1 | f
100001 | リンゴ | 1 | t
(2 行)
foo_nameがイヌまたはfoo_categoryが1 いずれかの条件にマッチする結果を一致順で表示。
pgdb=# SELECT * FROM foo WHERE foo_name = 'イヌ' OR foo_category = 1 ORDER BY foo_name = 'イヌ' DESC, foo_category = 1 DESC;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
100004 | イヌ | 2 | f
100001 | リンゴ | 1 | t
100002 | バナナ | 1 | f
(3 行)