MySQL按顺序忽略最后一个顺序的多个列

时间:2012-09-20 16:22:45

标签: mysql sql-order-by tinyint

使用以下查询时:

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       |                |
+------------------+--------------+------+-----+---------+----------------+

1 个答案:

答案 0 :(得分:3)

id字段是[唯一自动增量]主键。这意味着,无论product_idis_valid的值如何,id的顺序都会使其他两个排序规则无效。

我认为您可能不理解ORDER BY子句是嵌套排序,而不是列值的独立排序。