tengo una base de datos con apartamentos e imágenes para cada apartamento. Cada apartamento puede tener una, varias o ninguna imagen, y cada imagen puede estar desactivada o activada (g.active), destacada o no (g.highlighted), además de tener un número de orden (1ª, 2ª, 3ª) relativo al resto de las imágenes del mismo apartamento.
Quiero que mi consulta me devuelva todos los apartamentos que tengo activos en la base de datos, y para cada uno de ellos una imagen, si la tiene. Después de darle bastantes vueltas, he conseguido la siguiente consulta:
Código :
SELECT a.id_apartment, al.title, al.description, al.features, if(g.active = "1", g.image, NULL) AS image FROM apartments AS a INNER JOIN apartments_lang AS al ON a.id_apartment = al.rl_apartment LEFT JOIN gallery_relations AS gr ON a.id_apartment = gr.rl_id LEFT JOIN gallery AS g ON gr.rl_gallery = g.id_gallery WHERE al.language = "es" AND a.site = "ceama" AND a.active = "1" AND (gr.section = "apartments" OR gr.section IS NULL) GROUP BY a.id_apartment ORDER BY a.sort ASC, g.sort ASC LIMIT 0, 5
La consulta me devuelve correctamente todos los apartamentos, y una imagen para cada apartamento. El problema está en que también me gustaría que, de entre las imágenes asociadas al apartamento, me devolviera preferentemente la que tenga un número de orden más bajo, lo intento hacer utilizando el ORDER BY g.sort ASC, pero no me devuelve el resultado esperado. ¿Qué hago mal? ¿Cómo puedo conseguir dicho resultado?
Gracias y un saludo.