Als ik het goed heb begrepen, lijkt het erop dat je uitdrukkingen kunt gebruiken in je ORDER BY
, op een manier die vergelijkbaar is met het geaccepteerde antwoord op de volgende Stack Overflow-post:
Daarom kan uw vraag er als volgt uitzien:
SELECT imageID
FROM ...
JOIN ...
WHERE designID = 100
ORDER BY garmentID = 1 DESC,
colorID = 5 DESC,
sizeID = 10 DESC;
Merk op dat garmentID
, colorID
, en sizeID
worden niet gebruikt als filters in de WHERE
clausule. De waarden worden alleen gebruikt in de ORDER BY
uitdrukkingen.
Testgeval:
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);
Resultaat:
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)
Let op hoe de rij die overeenkomt met de opgegeven garmentID
, colorID
en sizeID
is eerste. Als dat niet lukt, worden de rijen die overeenkomen met garmentID
en colorID
zijn de volgende. Dan de rijen die alleen overeenkomen met garmentID
volgen. Dan de rest, die alleen overeenkomt met de designID
filter van de WHERE
clausule.
Ik denk dat het de moeite waard is om dit in SQL te doen. Als @Toby merkte op in het andere antwoord
, hoeft u zich over het algemeen geen zorgen te maken over de prestaties bij het sorteren van zo'n klein aantal rijen, ervan uitgaande dat u altijd filtert op designID
... Wat betreft uw andere vraag, ik weet niet of er een naam is voor zo'n zoekopdracht - ik noem het meestal "ordenen op een uitdrukking".