MySQL按多列排序,忽略最后按指令排序
Posted
技术标签:
【中文标题】MySQL按多列排序,忽略最后按指令排序【英文标题】:MySQL order by multiple columns ignoring last order by directive 【发布时间】:2012-09-13 01:35:39 【问题描述】:使用以下查询时:
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】:id
字段是 [唯一自动增量] 主键。这意味着无论product_id
和is_valid
的值如何,id
的顺序都会使其他两个排序规则失效。
我认为您可能不理解 ORDER BY
子句作为嵌套排序而不是作为列值的独立排序。
【讨论】:
完全正确,在 mysql 手册中挖掘到 Hades 的家门口之后,发现将 ID order 子句移到最后一个位置可以解决问题,无论如何,谢谢,你太棒了。以上是关于MySQL按多列排序,忽略最后按指令排序的主要内容,如果未能解决你的问题,请参考以下文章