Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1527 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème de jointure ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de jointure ?

n°1782472
welcominh
Posté le 04-09-2008 à 11:24:00  profilanswer
 

Bonjour à tous,
 
j'ai un problème de requete SQL depuis hier.
J'ai 3 tables: semaine, personne et reservation.
 
semaine                     reservation                       personne
----------                ----------------               ----------------
id_semaine                 id_reservation                   id_personne
date_debut                id_semaine                        nom
date_fin                     id_personne
                                enchere
 
En gros, une personne peut réserver (une chambre par exemple) pour une semaine ou plusieurs. Mais pour l'obtenir, elle doit avoir la plus grande enchère, sachant qu'il y peut y en avoir plusieurs sur la même semaine évidemment (ou aucune même).
J'aimerais récupérer les semaines où il y a eu une (des) réservations avec le nom de la personne et son enchère, en l'occurence la max en cours.
 
Pour l'instant j'ai ca:

Code :
  1. select semaine.id_semaine, date_debut, date_fin, nom, max(enchere) as max_enchere
  2. from semaine, reservation, personne
  3. where semaine.id_semaine=reservation.id_semaine
  4. and reservation.id_personne=personne.id_personne
  5. group by semaine.id_semaine
  6. order by semaine.date_debut


 
J'arrive bien à récupérer les semaines qui ont eu des réservations avec leur enchère max. Par contre, l'enchère ne correspond pas à la bonne personne. J'ai loupé quelque chose  :??: parce que j'ai dans le where une condition qui devrait garantir la cohérence entre enchère et personne non?
 
Pouvez-vous m'aider pliz :(
Merci infiniment.


Message édité par welcominh le 04-09-2008 à 11:33:24

---------------
Direct-download.com, le moteur de recherche pour Mega
mood
Publicité
Posté le 04-09-2008 à 11:24:00  profilanswer
 

n°1782486
anapajari
s/travail/glanding on hfr/gs;
Posté le 04-09-2008 à 11:41:13  profilanswer
 

D'abord , apprendre à écrire explicitement les jointures ça évite bien des soucis.
Ensuite, quand tu utilises un aggregat, il vaut mieux grouper sur tous les champs selectionnés pour s'éviter des surprises ( la plupart des sgbd t'y forcent de toute façon).
Morale , t'as requête ne fais pas du tout faire ce que tu veux ( enfin ce que j'en comprends).

 

J'écrirai un truc comme ça:

Code :
  1. SELECT
  2.  s.id_semaine,
  3.  date_debut,
  4.  date_fin,
  5.  nom
  6. FROM
  7. semaine s
  8. INNER JOIN reversation r ON r.id_semaine = s.id_semaine
  9. INNER JOIN personne p ON p.id_personne = r.id_personne
  10. INNER JOIN (
  11.    SELECT
  12.      id_semaine,
  13.      max(id_enchere) AS mEnchere
  14.    FROM
  15.      reservation
  16.    GROUP BY id_semaine
  17.  ) m ON m.id_semaine = s.id_semaine AND r.enchere = m.mEnchere
 


Message édité par anapajari le 04-09-2008 à 11:42:18

---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1782498
welcominh
Posté le 04-09-2008 à 12:00:35  profilanswer
 

je n'ai pas l'habitude d'utiliser les INNER JOIN. J'utilise seulement par exemple les LEFT JOIN car les jointures pas conditions "normales" ne peuvent pas le faire (si j'ai bien compris elles font ce que font les INNER JOIN).
 
En tout cas, ca marche bien ta requête. (je l'ai légèrement réadapté à mon cas)
Merci beaucoup !


---------------
Direct-download.com, le moteur de recherche pour Mega

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème de jointure ?

 

Sujets relatifs
probleme requete jointure et distinct probleme jointure bdd phpmyadmin
[SQL]Problème requête simple: jointure externeprobleme de jointure
[MySQL] Problème avec Jointure ( et plusieurs COUNT sur même table)Problème de jointure
Problème avec une jointureProblème avec la fonction avg en double jointure
Problème de jointure mysqlProblème de jointure ? 'where clause'
Plus de sujets relatifs à : Problème de jointure ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR