0

私はこのmysqlクエリを持っています:

SELECT * FROM `mytable` WHERE (condition 1) OR (condition 2) OR (condition3)

このクエリで、条件 1 の行、続いて条件 2 の行、最後に条件 3 の行を表示できますか?

UNIONを使用してこれを行いましたが、動作しましたが、遅くなりました(mysqlでクエリをテストしました)-実際には、重複がない場合は「OR」クエリよりも高速ですが、重複がある場合ははるかに遅くなります。

タイ!

4

3 に答える 3

1

これがうまくいくかどうかわからない:

SELECT * FROM `mytable` WHERE (condition 1) OR (condition 2) OR (condition3)
ORDER BY CASE WHEN condition=1 THEN 1 
         CASE WHEN condition=2 THEN 2
         CASE WHEN condition=3 THEN 3
         END
于 2012-09-12T12:05:52.150 に答える
1

1つの方法はUNION ALL、あなたがしたように使用することです。重複を避けるために、使用できます

SELECT * FROM `mytable` WHERE (condition 1)
UNION ALL
SELECT * FROM `mytable` WHERE (condition 2) AND NOT (condition 1)
UNION ALL
SELECT * FROM `mytable` WHERE (condition 3) AND NOT (condition 1 OR condition 2)

しかし、おそらくまだ遅くなるでしょう。

于 2012-09-12T12:00:17.150 に答える
0

ORDER BYこれを達成するために使用できると思います。これを試して:

SELECT * FROM `mytable` WHERE (条件 1) OR (条件 2) OR (条件 3)
ORDER BY ((条件 1) * 4 + (条件 2) * 2 + 条件 1) DESC;

編集: 実際には、基本的に 3 ビットの数値を作成し、それを並べ替えています。この真理値表を想像してください:

C1 | C2 | C3 | 結果
  0 | 0 | 0 | 0
  0 | 0 | 1 | 1
  0 | 1 | 0 | 2
  0 | 1 | 1 | 3
  1 | 0 | 0 | 4
  1 | 0 | 1 | 5
  1 | 1 | 0 | 6
  1 | 1 | 1 | 7

result DESC(下から上に)並べ替える場合、実際には最初に C1 で並べ替え、次に false の場合は C2 で並べ替え、次に false の場合は C3 で並べ替えます。

于 2012-09-12T12:05:36.160 に答える