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 | |
+------------------+--------------+------+-----+---------+----------------+
1 ответ
Решение
id
поле является [уникальным автоинкрементным] первичным ключом. Это означает, что независимо от значений product_id
а также is_valid
имеет порядок id
сделает два других правила заказа бесполезными.
Я думаю, что вы, вероятно, не понимаете, что ORDER BY
Предложение работает как вложенный порядок, а не как независимый порядок значений столбцов.