Si entendí bien, parece que puedes usar expresiones en tu ORDER BY , de manera similar a la respuesta aceptada dada a la siguiente publicación de desbordamiento de pila:
Por lo tanto, su consulta podría verse así:
SELECT imageID
FROM ...
JOIN ...
WHERE designID = 100
ORDER BY garmentID = 1 DESC,
colorID = 5 DESC,
sizeID = 10 DESC;
Tenga en cuenta que garmentID , colorID y sizeID no se utilizan como filtros en WHERE cláusula. Los valores solo se usan en el ORDER BY expresiones.
Caso de prueba:
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);
Resultado:
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)
Observe cómo la fila que coincide con el garmentID especificado , colorID y sizeID es primero. En su defecto, las filas que coincidan con garmentID y colorID son los siguientes Luego, las filas que solo coinciden con garmentID seguir. Luego el resto, que solo coincide con el designID filtro del WHERE cláusula.
Creo que vale la pena hacer esto en SQL. Como @Toby señaló en la otra respuesta
, en general, no necesita preocuparse por el rendimiento al ordenar un número tan pequeño de filas, suponiendo que siempre filtrará por designID ... En cuanto a su otra pregunta, no sé si existe un nombre para esa consulta; tiendo a llamarlo "ordenar por una expresión".