6

8 つのレコードを含むユーザー テーブルがあります。フィールドID(そのテーブルの主キー)に基づいてデータを降順で並べ替えたいのですが、ID 3と5は除きます。したがって、最終的に結果は次のようになります

id  name
--  ----
3   peter
5   david
8   john
7   stella
6   jim
4   jack
2   nancy
1   scott

id 3 と 5 を除いて、残りのデータは降順で配置する必要があり、3 と 5 は昇順で配置する必要があります。

4

4 に答える 4

7
SELECT * FROM user ORDER BY IF(id=3 OR id=5, id, ~id) ASC
于 2013-01-16T12:29:05.740 に答える
6

このようなもの:

order by 
   case 
     when id = 3 then 999
     when id = 5 then 998
     else id
   end desc

これは、実際には 8 行を超えないことを前提としています。それ以外の場合は、3 と 5 を上に移動する「マジック」ナンバーを変更する必要があります。

于 2013-01-16T12:28:35.790 に答える
1

ここでの秘訣は、列挙型を使用することだと思います。

SELECT id, name FROM my_table WHERE id IN (3, 5) ORDER BY ASC
UNION
SELECT id, name FROM my_table WHERE id NOT IN(3, 5) ORDER BY DESC
于 2013-01-16T12:29:05.427 に答える
1

MySQL には、FIELD*リストに値が見つからない場合にゼロを返すという関数があります。

SELECT *
FROM   tableName
ORDER BY FIELD(id, 5, 3) DESC, id DESC
于 2013-01-16T12:50:37.377 に答える