Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จัดเรียงค่าสูงสุดไปต่ำสุดใน MySQL ด้วย ORDER BY LENGTH()

เมื่อตัวเลขเก็บเป็น VARCHAR การจัดเรียงแบบสตริงจะผิด (เช่น '80' > '108') ใช้ LENGTH() จัดเรียงตามความยาวก่อน

mysql> CREATE TABLE DemoTable (
    -> Price VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.92 sec)
mysql> INSERT INTO DemoTable VALUES('80');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('800');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('108');
Query OK, 1 row affected (0.50 sec)
mysql> INSERT INTO DemoTable VALUES('765');
Query OK, 1 row affected (0.14 sec)
mysql> SELECT * FROM DemoTable;
+-------+
| Price |
+-------+
| 80    |
| 800   |
| 108   |
| 765   |
+-------+
4 rows in set (0.00 sec)

จัดเรียงมากไปน้อย: เรียงตามความยาว DESC ก่อน แล้วค่าตัวอักษร DESC:

mysql> SELECT * FROM DemoTable ORDER BY LENGTH(Price) DESC, Price DESC;
+-------+
| Price |
+-------+
| 800   |
| 765   |
| 108   |
| 80    |
+-------+
4 rows in set (0.00 sec)

แนวทางที่ดีกว่า: เปลี่ยนชนิดข้อมูลเป็น INT/DECIMAL แล้ว ORDER BY Price DESC ธรรมดา