2012-09-20 79 views
1

忽略最後爲了當使用下面的查詢:MySQL的順序由多列由指令

SELECT id, rater_id, product_id, is_valid 
FROM `ratings` 
WHERE (`ratings`.element_id = 3151) 
ORDER BY id DESC, product_id DESC, is_valid ASC; 

我希望結果集將首先通過id來排序,然後通過PRODUCT_ID,然後is_valid。 實際發生的情況是結果集確實是有序的,但結果中的is_valid列似乎按照DESC排序,而不是由ASC排序。嘗試使用ASC和DESC,但結果集保持不變。

+------------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+------------------+--------------+------+-----+---------+----------------+ 
| id    | int(11)  | NO | PRI | NULL | auto_increment | 
| user_id   | int(11)  | NO | MUL | NULL |    | 
| product_id  | int(11)  | YES | MUL | NULL |    | 
| value   | tinyint(4) | YES | MUL | NULL |    | 
| rater_id   | int(11)  | YES |  | NULL |    | 
| comment   | varchar(350) | YES |  | NULL |    | 
| created_at  | datetime  | YES |  | NULL |    | 
| updated_at  | datetime  | YES |  | NULL |    | 
| element_id  | int(11)  | YES | MUL | NULL |    | 
| is_valid   | tinyint(1) | YES | MUL | 0  |    | 
+------------------+--------------+------+-----+---------+----------------+ 

回答

3

id字段是[唯一自動增量]主鍵。這意味着無論product_idis_valid的值如何,id的順序都會導致其他兩個排序規則無用。

我認爲你可能不明白,ORDER BY子句作爲嵌套排序而不是作爲列值的獨立排序。

+0

確實如此,在挖掘到MySQL手冊中Hades的家門口後,通過將ID訂單子句移動到最後位置將解決問題,因爲無論如何,您都很棒。 –