Problème de jointure mysql - SQL/NoSQL - Programmation
Marsh Posté le 09-03-2007 à 10:12:29
Il te faut 1 seule photo, ou bien toutes les photos, avec la principale en premier?
Marsh Posté le 09-03-2007 à 10:37:52
ça va pas passer via une jointure seulement, ça...première idée, on trie les photos par le champ 'principale', et on ne garde que la première :
select a.titre, a.id, p.nom
from annonces a left join photos p on p.id_annonce=a.id
where p.nom =
( select p2.nom
from photos p2
where p2.id_annonce = a.id
order by p2.principale desc
limit 1)
Pas testé, et tapé vite fait ici...
Marsh Posté le 09-03-2007 à 10:51:04
ça fonctionne si l'annonce à une ou plusieurs photos, mais sinon elle ne sera pas dans les résultats.
Il n'existe pas une sorte de
Code :
|
?
Comment il sélectionne la photo ? par son nom ? son id ? son index s'il y a?
Marsh Posté le 09-03-2007 à 10:53:21
A moins que je sois très fatigué, le group by va te retourner autant de ligne par annonce qu'il trouve de photos.
T'avais pas précisé qu'il pouvait ne pas y avoir de photo...le plus simple est de le faire en deux requêtes, tout simplement, à mon avis, au lieu de t'emmerder.
Marsh Posté le 09-03-2007 à 11:03:35
ha ben oui, il peut ne pas y avoir de photo ! trop facile sinon... hum.
j'ai aussi un
Code :
|
dans mon SELECT pour avoir le nombre de photo que possede chaque annonce.
Est ce que ce n'est pas au moment du "SELECT p.nom" qu'il faut préciser qu'on veut la principale ?
2 requètes quand on pourrait en faire une ?
ya un moyen, ya un moyen
Marsh Posté le 09-03-2007 à 11:05:52
bah tu peux modifier ma requête plus haut si tu veux, remarque.
Code :
|
Marsh Posté le 09-03-2007 à 11:14:48
Ouais, ça me retourne bien les annonces avec la photo principale, ou pas principale, ou sans photo... mais... ya encore un petit soucis:
Code :
|
me retourne toujours nbr_photos = 1
Forcément...
raahhh
Marsh Posté le 09-03-2007 à 11:20:34
ah ben oui, hein, on peut pas avoir le beurre et l'argent du beurre.
Marsh Posté le 09-03-2007 à 11:30:13
...et avec group by/having, tu peux pas t'en sortir?
genre
Code :
|
Marsh Posté le 09-03-2007 à 11:48:33
Non ça ne fonctionne pas, il me retourne que les annonces qui ont une photo, et ce ne sont pas les principales.
Marsh Posté le 09-03-2007 à 11:50:34
oups.
bah démerde-toi en 2 requêtes, là. Flemme de chercher une autre option.
Marsh Posté le 09-03-2007 à 11:52:01
ben ouais, je crois que pour me dépanner je vais faire ça, mais c'est dommage. C'est pourtant une requete relativement classique quand on a une table "photos" .
Merci pour tout Skeye.
Marsh Posté le 09-03-2007 à 11:55:05
Non, ta structure est mauvaise.
Ce qui serait classique, c'est d'avoir l'id de la photo principale dans ta table annonce...
Marsh Posté le 09-03-2007 à 12:02:36
ha ouais j'avais pas pensé à ça....
c'est pas bête en effet...
sinon j'ai trouvé une solution:
Code :
|
Marsh Posté le 09-03-2007 à 12:32:18
papanoramix a écrit : Ouais, ça me retourne bien les annonces avec la photo principale, ou pas principale, ou sans photo... mais... ya encore un petit soucis:
|
Code :
|
Marsh Posté le 09-03-2007 à 13:22:15
En conservant la limite, j'aurais jointé sur le sous select (au lieu de le mettre dans le where) pour eviter ce probleme.
Par contre magic, le sum sert à rien ça remontera toujours 1 ou 0
Marsh Posté le 09-03-2007 à 14:20:50
ah ouais en effet, j'avais mal lu
faut dire aussi, c'est qui l'andouille qu'à mis un count() dans la requête originale ?
Marsh Posté le 09-03-2007 à 16:42:55
heu... c'est moi. ça sert pas à ça un count ?
je connais pas cette synthaxe du case when then else, c'est nouveau ?
Marsh Posté le 09-03-2007 à 17:11:50
si ça sert un ça un count mais count d'un truc avec limit à 1 ça risque pas de servir
et case when nan s'pas nouveau non plus
Marsh Posté le 08-03-2007 à 15:40:00
Bonjour,
je vous expose rapidement mon problème:
j'ai une table 'annonces' et une table 'photos'
dans cette table 'photos' il y a un champ "principale" qui est à 1 si cette photo à été selectionnée comme principale. Mais il peut ne pas y avoir de photo principale pour une annonce.
Je cherche donc la jointure permettant de selectionner une annonce avec une photo, si elle existe, et la photo principale s'il y a une photo principale, sinon n'importe laquelle.
j'ai donc pour l'instant ma requete :
à quel moment doit-on spécifier la condition du principale='1' ?