Hvis jeg har forstået det rigtigt, ser det ud til, at du kan bruge udtryk i din ORDER BY , på en måde svarende til det accepterede svar givet til følgende Stack Overflow-indlæg:
Derfor kan din forespørgsel se sådan ud:
SELECT imageID
FROM ...
JOIN ...
WHERE designID = 100
ORDER BY garmentID = 1 DESC,
colorID = 5 DESC,
sizeID = 10 DESC;
Bemærk at garmentID , colorID og sizeID bruges ikke som filtre i WHERE klausul. Værdierne bruges kun i ORDER BY udtryk.
Testtilfælde:
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);
Resultat:
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)
Bemærk, hvordan rækken, der matcher det angivne garmentID , colorID og sizeID er først. I modsat fald vil de rækker, der matcher garmentID og colorID er næste. Så de rækker, der kun matcher garmentID følge efter. Så resten, som kun matcher designID filter af WHERE klausul.
Jeg tror, det er værd at gøre dette i SQL. Som @Toby noterede i det andet svar
, generelt behøver du ikke bekymre dig om ydeevne, når du sorterer et så lille antal rækker, forudsat at du altid vil filtrere efter designID ... Hvad angår dit andet spørgsmål, så ved jeg ikke, om der er et navn for sådan en forespørgsel - jeg plejer at kalde det "ordre efter et udtryk".