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".