4

roleという名前の列を持つテーブルがあり、値は次のとおりです。

Scientific staff
PostDocs
Supporting staff
PNUT
Visiting researchers
Secretary
Ph.D. students
Students
Other

科学系スタッフORDER BYを第一に考えて使いたいと思います。このようなクエリを実行した瞬間、博士号のフィールドは. 学生が最初に返されます(現時点では、データベースの行にその他のフィールドが含まれていないためです)。のみを使用してこれを達成する方法はありますか、または返された値を手動で変更する必要がありますか? もしそうなら、その方法を教えてください。mysql

SELECT * FROM members ORDER BY role
4

2 に答える 2

2

追加のテーブルと結合なしでそれを行うことができます:

SELECT * FROM members 
ORDER BY
  CASE role
     WHEN 'Scientific staff' THEN 1
     WHEN 'PostDocs'         THEN 2
     WHEN 'Supporting staff' THEN 5
     WHEN 'PNUT'             THEN 6
     WHEN 'Visiting researchers' THEN 4
     WHEN 'Secretary'        THEN 3
     WHEN 'Ph.D. students'   THEN 8
     WHEN 'Students'         THEN 7
     WHEN 'Other'            THEN 9
     ELSE   10
  END
于 2013-08-07T21:13:15.213 に答える
2

現在実装されているため、Scientific Staff が最初になるような順序で並べることはできません。なぜなら、Oder By を実行すると、問題の項目の順序で並べ替えられるためです (この場合、役割によってアルファベット順に表示されます)。

これに対する簡単な解決策は、それらの値を含む並べ替え優先度テーブルを作成し、数値の優先度を割り当ててから、優先度で並べ替えることです。混乱する可能性があるため、もう少し詳しく説明しましょう。

これらの各ロールをリストした 2 つ目のテーブルを作成し、2 番目の列でそれらのロールに表示される優先順位を付けます。

表: 役割 | 優先順位

科学スタッフ | 1

博士課程の学生 | 2

その他 | 3 (など)

その後、次のようなことができます (疑似 MySQL):

 select members.role from members
 inner join priority
 on members.role = priority.role
 order by priority.priority

これにより、優先度テーブルで設定した優先度順に並べられたメンバー テーブルのロール フィールドが得られます。内部結合なので役割のない人は表示されません。

于 2013-08-07T20:25:05.040 に答える