Jika saya mengerti dengan benar, sepertinya Anda dapat menggunakan ekspresi dalam ORDER BY , dengan cara yang mirip dengan jawaban yang diterima yang diberikan pada posting Stack Overflow berikut:
Oleh karena itu, kueri Anda mungkin terlihat seperti ini:
SELECT imageID
FROM ...
JOIN ...
WHERE designID = 100
ORDER BY garmentID = 1 DESC,
colorID = 5 DESC,
sizeID = 10 DESC;
Perhatikan bahwa garmentID , colorID , dan sizeID tidak digunakan sebagai filter di WHERE ayat. Nilai hanya digunakan dalam ORDER BY ekspresi.
Kasus uji:
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);
Hasil:
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)
Perhatikan bagaimana baris yang cocok dengan garmentID yang ditentukan , colorID dan sizeID adalah yang pertama. Jika gagal, baris yang cocok dengan garmentID dan colorID berikutnya. Kemudian baris yang hanya cocok dengan garmentID mengikuti. Kemudian sisanya, yang hanya cocok dengan designID filter dari WHERE klausa.
Saya percaya ini layak dilakukan dalam SQL. Sebagai @Toby mencatat dalam jawaban lain
, secara umum Anda tidak perlu khawatir tentang kinerja saat mengurutkan sejumlah kecil baris, dengan asumsi Anda akan selalu memfilter berdasarkan designID ... Adapun pertanyaan Anda yang lain, saya tidak tahu apakah ada nama untuk kueri semacam itu - saya cenderung menyebutnya "mengurutkan dengan ekspresi".