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