次のクエリを使用する場合:
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列は、ASCではなくDESCによってソートされているように見えます。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 | |
+------------------+--------------+------+-----+---------+----------------+