0

私は取り除くことができない小さな混乱に直面しています。属性idquestion_sequence_numbertitleを持つテーブル「user_questions 」があります。そのテーブルから、最初に「 question_sequence_number」、次に「id 」を指定したように、指定された優先順位に従ってレコードを取得したいと思います。したがって、私が望むのは、最初に指定したシーケンス番号でレコードを表示し、次に指定したIDでレコードを表示することです。 そのために、次のようなmySqlクエリを作成しました。

SELECT "user_questions".* FROM "user_questions" WHERE (question_sequence_number IN (11,13,16,19) OR id IN (198,199,200,201,202))

しかし、レコードは私が与えたIDで最初に来て、残りのレコードは質問シーケンス番号で来ています。

誰でもこれを達成するために私を助けてもらえますか?

ありがとう。

4

2 に答える 2

2

ORDER BY必要なレコードの順序を取得するには、節を使用する必要があります。それ以外の場合、注文は保証されません。

そうは言っても、このようなことを試すことができます

SELECT *
  FROM user_questions
 WHERE question_sequence_number IN (11,13,16,19) 
    OR id IN (198,199,200,201,202)
 ORDER BY (question_sequence_number IN (11,13,16,19)) DESC,
          CASE WHEN question_sequence_number IN (11,13,16,19) 
               THEN question_sequence_number
               ELSE id
          END

出力:

| | ID | QUESTION_SEQUENCE_NUMBER |
|-----|--------------------------|
| | 2 | 11 |
| | 4 | 13 |
| | 3 | 16 |
| | 1 | 19 |
| | 198 | 5 |
| | 199 | 4 |
| | 200 | 3 |
| | 201 | 2 |
| | 202 | 1 |

これがSQLFiddleのデモです

于 2013-08-31T06:19:08.717 に答える