【问题标题】:MySQL order by multiple columns ignoring last order by directiveMySQL按多列排序,忽略最后按指令排序
【发布时间】: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       |                |
+------------------+--------------+------+-----+---------+----------------+

【问题讨论】:

    标签: mysql sql-order-by tinyint


    【解决方案1】:

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

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

    【讨论】:

    • 完全正确,在 MySQL 手册中挖掘到 Hades 的家门口之后,发现将 ID order 子句移到最后一个位置可以解决问题,无论如何,谢谢,你太棒了。
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2018-03-12
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多