En utilisant MySQL, j'ai un ensemble de tables avec des relations 1-> N de membre -> éléments -> photos. J'essaie de sélectionner une liste d'éléments d'un membre + quelques colonnes de la première photo associée (en premier je veux dire la photo avec l'ordre de tri le plus bas).SQL - sélection du premier enregistrement correspondant pour la jointure
Actuellement, j'ai cette requête qui fonctionne, mais semble trop complexe. Y a-t-il un moyen plus simple et/ou comment cette requête pourrait-elle être améliorée? En particulier, je suis préoccupé par l'instruction la plus sélecte - MySQL optimisera-t-il cela uniquement pour travailler avec des photos pour le membre en question et devrais-je utiliser des clauses where supplémentaires pour l'optimiser.
SELECT items.member_id, items.item_id, items.title, p.photo_id, p.blob_id, p.image_width, p.image_height
FROM items
LEFT JOIN
(
SELECT photos.item_id, photos.photo_id, photos.blob_id, photos.image_width, photos.image_height
FROM
(
SELECT item_id, min(sort_order) as min_sort_order
FROM photos
GROUP BY item_id
) AS x
INNER JOIN photos on photos.item_id=x.item_id and photos.sort_order=x.min_sort_order
) AS p ON items.item_id = p.item_id
WHERE items.member_id=1
ORDER BY items.title;
Presque. J'ai oublié de mentionner que les articles ne doivent pas avoir de photo. Cette requête ne renvoie pas ces éléments. –
Dans ce cas, votre requête semble être correcte. – CristiC