2013-08-31 59 views
0

我一直面對一個小混亂,我無法擺脫。 我有一個表 「user_questions」 與屬性IDquestion_sequence_number冠軍。從那張表格中,我想根據給定的優先級來記錄這些記錄,如我先給出'question_sequence_number',然後'id'。所以,我想的是,記錄應顯示第一與我所提供的序列號和記錄應顯示下一個IDS我已經給了。
對於我已經寫了MYSQL查詢類似如下:
如何根據Mysql中where子句獲取記錄?

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

但記錄與IDS我已經給了,並與問題的順序號剩餘的記錄第一次降臨。

有沒有人可以幫我解決這個問題?

謝謝。

+0

它是好的,如果你可以給樣本數據和慾望輸出,但談到你的查詢,查詢你寫的只有過濾器記錄,沒有定義序號,請嘗試使用ORDER BY子句來獲取時間順序。 –

+0

我可以給ORDER BY question_sequence_number desc,記錄將帶有question_sequence_number,但帶有反向(19,16,13,11)。 – VenkatK

+0

我想以我在查詢中的question_sequence_number序列中提到的方式得到結果。 – VenkatK

回答

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演示

+0

非常感謝您的快速響應,它工作正常。 – VenkatK

+0

@VenkatK你非常歡迎。我很高興我可以幫助:) – peterm

0
DECLARE _Str VARCHAR(500); 
SET _Str=CONCAT("SELECT user_questions.* FROM user_questions WHERE (question_sequence_number IN ("11,13,16,19") OR id IN ("198,199,200,201,202")") 
PREPARE stmt FROM @s; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;