Wenn ich das richtig verstanden habe, sieht es so aus, als könnten Sie Ausdrücke in Ihrem ORDER BY
verwenden , ähnlich wie die akzeptierte Antwort auf den folgenden Stack Overflow-Beitrag:
Daher könnte Ihre Abfrage folgendermaßen aussehen:
SELECT imageID
FROM ...
JOIN ...
WHERE designID = 100
ORDER BY garmentID = 1 DESC,
colorID = 5 DESC,
sizeID = 10 DESC;
Beachten Sie, dass garmentID
, colorID
, und sizeID
werden nicht als Filter im WHERE
verwendet Klausel. Die Werte werden nur im ORDER BY
verwendet Ausdrücke.
Testfall:
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);
Ergebnis:
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)
Beachten Sie, wie die Zeile, die mit der angegebenen garmentID
übereinstimmt , colorID
und sizeID
ist zuerst. Andernfalls die Zeilen, die mit garmentID
übereinstimmen und colorID
sind die nächsten. Dann die Zeilen, die nur mit garmentID
übereinstimmen Folgen. Dann der Rest, der nur mit der designID
übereinstimmt Filter des WHERE
Klausel.
Ich glaube, es lohnt sich, dies in SQL zu tun. Als @Toby in der anderen Antwort vermerkt
, müssen Sie sich im Allgemeinen keine Gedanken über die Leistung machen, wenn Sie eine so kleine Anzahl von Zeilen sortieren, vorausgesetzt, Sie filtern immer nach designID
... Was Ihre andere Frage betrifft, ich weiß nicht, ob es einen Namen für eine solche Abfrage gibt - ich nenne sie eher "Ordnen nach einem Ausdruck".