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
, colorID
và sizeID
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 , colorID
và sizeID
Là đầu tiên. Nếu không, các hàng khớp với garmentID
và colorID
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".