Se ho capito bene, sembra che tu possa usare espressioni nel tuo ORDER BY , in modo simile alla risposta accettata data al seguente post di Stack Overflow:
Pertanto, la tua query potrebbe essere simile a questa:
SELECT imageID
FROM ...
JOIN ...
WHERE designID = 100
ORDER BY garmentID = 1 DESC,
colorID = 5 DESC,
sizeID = 10 DESC;
Nota che garmentID , colorID e sizeID non vengono utilizzati come filtri in WHERE clausola. I valori vengono utilizzati solo in ORDER BY espressioni.
Caso di prova:
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);
Risultato:
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)
Nota come la riga che corrisponde al garmentID specificato , colorID e sizeID è il primo. In caso contrario, le righe che corrispondono a garmentID e colorID sono i prossimi. Quindi le righe che corrispondono solo a garmentID Seguire. Poi il resto, che corrisponde solo al designID filtro del WHERE clausola.
Credo che valga la pena farlo in SQL. Come @Toby ha notato nell'altra risposta
, in generale non devi preoccuparti delle prestazioni quando ordini un numero così piccolo di righe, supponendo che filtrerai sempre per designID ... Per quanto riguarda l'altra tua domanda, non so se esiste un nome per una query del genere:tendo a chiamarla "ordinare in base a un'espressione".