limit dans une sous requete ?

Répondre
Sammuel
le 31/03/2011 à 15:44
Sammuel
Salut,

Cela fait un moment que je n'arrive pas à résoudre cette requête... Je ne sais pas d'ailleurs, si c'est la meilleure méthode à utiliser.

Pour résumé, sur une même page, j'aimerais lister plusieurs noms de recettes, avec en dessous de chaque nom, une liste de 5 photos (maximum). Sachant qu'une recette peut avoir un nombre X de photos.
Une recette peut avoir 20 photos, comme 5, 7, 10, 100, 1000 !

Je parle de recettes de cuisine pour simplifer mon exemple :)


Base de données :

RECETTE
recette_id
nom
description

PHOTO
id
recette_id


Résultats retournés

**********
Recette 1
photo 1
photo 2
photo 3
photo 4
**********
Recette 2
photo 5
photo 6
photo 7
photo 8
photo 9
photo 10
photo 11
photo 12
**********
Recette 3
photo 1
**********
Recette 4
photo 1
photo 2
photo 3
photo 4
photo 5
photo 6
**********


Résultats que j'aimerais obtenir

**********
Recette 1
photo 1
photo 2
photo 3
photo 4
**********
Recette 2
photo 5
photo 6
photo 7
photo 8
photo 9
**********
Recette 3
photo 1
**********
Recette 4
photo 1
photo 2
photo 3
photo 4
photo 5
**********


La requête de base est :

SELECT recette.recette_id,recette.nom,recette.description,photo.id FROM recette
LEFT JOIN photo ON photo.recette_id = recette.recette_id


=> mais elle m'affiche TOUTES les recettes avec TOUTES les photos de chaque recette. Ce qui est normal, vu qu'il n'y a pas de limite. Et je crois que l'on ne peut pas faire de "limit" dans un JOIN ?

J'ai tenté quelque chose du genre :

SELECT recette.recette_id,recette.nom,recette.description,p.id
FROM recette
LEFT JOIN (SELECT id,recette_id FROM photo WHERE xxxxxxxxxx) p ON recette.recette_id = p.recette_id
WHERE xxxxxxxxxxxxxxxxxxxxxxxxxxxxx


=> mais cela m'affiche TOUTES les recettes avec TOUTES les photos de chaque recette.
=> J'ai essayé en ajoutant un "limit" dans le SELECT du LEFT JOIN, mais cela ne fait rien :p

Auriez vous une solution pour limiter le nombre de résultat d'une "sous requête" ?
=> Une fois la requête effectuée, je pourrais très bien limiter le nombre d'images à afficher à 5, mais je ne pense pas que ce soit la meilleure solution... surtout si les recettes ont plus d'une centaine de photo chacune :p

Merki.
LupusMic
le 05/04/2011 à 10:45
LupusMic
Il faut savoir que les sous-requêtes ont deux inconvéniens : elles défoncent les performances, et leur comportement n'est pas complet (dans MySQL en tout cas).

Je ne crois pas qu'il y ait une voie SQL pour faire ce que tu veux.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Sammuel
le 06/04/2011 à 17:00
Sammuel
C'est ce qu'on appelle une limite de mysql :X

Je vais devoir contourner la chose alors, du genre, ajouter un champ 'selection' à ma table et faire un script qui ira sélectionner aléatoirement 5 photos de chaque recette.
Et je n'aurais plus qu'à les sélectionner.

Je n'aime pas ce genre de complication !
LupusMic
le 06/04/2011 à 19:11
LupusMic
Ce n'est pas une limitation de MySQL à proprement parlé, mais plutôt de SQL. C'est le genre de traitement qui est à effectuer du côté de PHP par exemple.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours