Tengo varias tablas que tienen unido para formar una tabla con columnas¿Hay una técnica de SQL para ordenar al hacer coincidir varios criterios?
designID
garmentID
colorID
sizeID
imageID
Tengo una función que tiene este aspecto [variables en corchetes son opcionales]:
getProductImages($designID, [$garmentID], [$colorID], [$sizeID]);
lo quiero para devolver todos los imageIDs que responden a $ designID en el siguiente orden:
- filas que coinciden con $ garmentID, colorID $ y $ sizeID primera
- filas que coinciden con $ garmentID y $ ColorID próximos
- filas que coinciden con sólo $ garmentID próximos
- filas que coinciden con ninguna (sólo $ designID) última
que podía hacer esto muy fácilmente con sólo cargar todos las filas que coinciden con $ designID y luego ordenarlas en PHP, pero tengo entendido que generalmente es más rápido hacer la clasificación en MySQL cuando sea posible. Habrá aproximadamente 20 filas que coincidan con un $ designID determinado.
Así que mi pregunta es doble: ¿Vale la pena hacer la clasificación en una declaración de SQL? Si lo hago, ¿cuál es el mejor enfoque para tomar?
También me interesaría saber si hay un nombre para este tipo de clasificación.
Un importante descargo de responsabilidad sobre esta técnica es que las columnas que no coinciden no serán ordenadas; esto puede o no ser un problema para este caso de uso. – Stobor
@Stobor: no creo que lo entiendo. ¿Puedes dar un ejemplo? ... También ten en cuenta que creo que el OP quiere solo una columna en el conjunto de resultados (una columna 'imageId'). –
Esto es exactamente lo que estaba buscando, y considerablemente más elegante de lo que imaginaba. – Robert