Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có kỹ thuật SQL nào để sắp xếp thứ tự bằng cách kết hợp nhiều tiêu chí không?

Nếu tôi hiểu đúng, có vẻ như bạn có thể sử dụng các biểu thức trong ORDER BY của mình , theo cách tương tự như câu trả lời được chấp nhận cho bài đăng Stack Overflow sau:

Do đó, truy vấn của bạn có thể trông giống như sau:

SELECT    imageID
FROM      ...
JOIN      ...
WHERE     designID = 100          
ORDER BY  garmentID = 1 DESC,
          colorID = 5 DESC,
          sizeID = 10 DESC;

Lưu ý rằng garmentID , colorIDsizeID không được sử dụng làm bộ lọc trong WHERE mệnh đề. Các giá trị chỉ được sử dụng trong ORDER BY biểu thức.

Trường hợp thử nghiệm:

CREATE TABLE designs (designID int, garmentID int, colorID int, sizeID int);

INSERT INTO designs VALUES (100, 1, 1, 1);
INSERT INTO designs VALUES (100, 1, 2, 2);
INSERT INTO designs VALUES (100, 1, 5, 3);
INSERT INTO designs VALUES (100, 1, 5, 10);
INSERT INTO designs VALUES (100, 1, 5, 15);
INSERT INTO designs VALUES (100, 1, 8, 20);
INSERT INTO designs VALUES (100, 2, 5, 10);
INSERT INTO designs VALUES (100, 2, 6, 15);
INSERT INTO designs VALUES (101, 1, 1, 1);
INSERT INTO designs VALUES (101, 2, 1, 1);

Kết quả:

SELECT    * 
FROM      designs 
WHERE     designID = 100 
ORDER BY  garmentID = 1 DESC, 
          colorID = 5 DESC, 
          sizeID = 10 DESC;

+----------+-----------+---------+--------+
| designID | garmentID | colorID | sizeID |
+----------+-----------+---------+--------+
|      100 |         1 |       5 |     10 |
|      100 |         1 |       5 |      3 |
|      100 |         1 |       5 |     15 |
|      100 |         1 |       1 |      1 |
|      100 |         1 |       2 |      2 |
|      100 |         1 |       8 |     20 |
|      100 |         2 |       5 |     10 |
|      100 |         2 |       6 |     15 |
+----------+-----------+---------+--------+
8 rows in set (0.02 sec)

Lưu ý cách hàng khớp với garmentID được chỉ định , colorIDsizeID Là đầu tiên. Nếu không, các hàng khớp với garmentIDcolorID là tiếp theo. Sau đó, các hàng chỉ khớp với garmentID theo dõi. Sau đó, phần còn lại, chỉ khớp với designID bộ lọc của WHERE mệnh đề.

Tôi tin rằng nó đáng làm điều này trong SQL. Dưới dạng @Toby đã lưu ý trong câu trả lời khác , nói chung, bạn không cần phải lo lắng về hiệu suất khi sắp xếp một số lượng nhỏ hàng như vậy, giả sử bạn sẽ luôn lọc theo designID ... Đối với câu hỏi khác của bạn, tôi không biết có tên nào cho truy vấn như vậy không - tôi có xu hướng gọi nó là "sắp xếp theo một biểu thức".



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối với cơ sở dữ liệu mySQL bằng asp.net

  2. mysql - Bí danh cột động

  3. Đếm các hàng có cùng ID trong php

  4. Cách dễ nhất để chuyển đổi mảng byte thành Blob trong java

  5. Làm thế nào để sao lưu cơ sở dữ liệu MySQL trong PHP?