Problème select max mysql

Problème select max mysql - PHP - Programmation

Marsh Posté le 15-03-2010 à 18:43:37    

Bonjour,  
 
Je suis chargé d'analyser les résultats des élections régionales. J'ai 3 tables :
 
- ville (id, nom)  
- lister (id, nom)  
- resultat (id, id_ville, id_liste, voix)
 
Je voudrais connaître la liste qui a fait le meilleur score dans chaque ville et ensuite afficher ces villes en selectionnant une liste. En clair, je voudrais connaître les villes dans lesquelles une liste a fait les meilleurs résultats.  
Le problème, c'est que je sèche complétement sur la requête. J'arrive à selectionner le max(voix) dans chaque ville mais je n'arrive pas en même temps à afficher le nom de la liste.  
 
En résumé, je veux connaître toutes les villes dans lesquelles la liste X arrive en tête...
 
Si quelqu'un pouvait m'aider...  
 
D'avance merci !

Reply

Marsh Posté le 15-03-2010 à 18:43:37   

Reply

Marsh Posté le 15-03-2010 à 19:32:11    

Pourquoi MAX ?
Utilsez COUNT (*)
 
par example:
 select ville.nom, count(resultat.*) as count from ville, resultat where resultat.id_ville = ville.id and id_list=*LISTE_X* group by resultat.id_ville order by count(resultat.*) desc
 
LISTE_X = votre numero

Reply

Marsh Posté le 15-03-2010 à 23:12:41    

Je ne comprends pas la syntaxe count(resultat.*)
 
Mon idée c'est de récupérer la plus grande valeur de voix (donc la liste gagnante) pour chaque ville et de savoir si cette liste correspond à celle que je recherche...

Reply

Marsh Posté le 16-03-2010 à 11:41:14    

Sais pas si c'est beau mais ça devrait marcher
 
 
Les listes gagnantes pour chaque ville :

Code :
  1. select v.nom, l.nom from ville v inner join lister l inner join resultat r on l.id=r.id_liste and v.id=r.id_ville where r.voix=(select MAX(voix) from resultat where id_ville=r.id_ville group by id_ville);


 
La liste gagnante pour une ville :

Code :
  1. select l.nom from ville v inner join lister l inner join resultat r on l.id=r.id_liste where v.id={ID_VILLE} and r.voix=(select MAX(voix) from resultat where id_ville={ID_VILLE} group by id_ville);


 
Les villes gagnées par une liste :

Code :
  1. select v.nom, l.nom from ville v inner join lister l inner join resultat r on l.id=r.id_liste and v.id=r.id_ville where l.id={ID_LISTE} AND r.voix=(select MAX(voix) from resultat where id_ville=r.id_ville group by id_ville);


---------------
oui oui
Reply

Marsh Posté le 16-03-2010 à 14:44:30    

tintinduweb a écrit :

Bonjour,  
 
Je suis chargé d'analyser les résultats des élections régionales. J'ai 3 tables :
 
- ville (id, nom)  
- lister (id, nom)  
- resultat (id, id_ville, id_liste, voix)
 
Je voudrais connaître la liste qui a fait le meilleur score dans chaque ville et ensuite afficher ces villes en selectionnant une liste. En clair, je voudrais connaître les villes dans lesquelles une liste a fait les meilleurs résultats.  
Le problème, c'est que je sèche complétement sur la requête. J'arrive à selectionner le max(voix) dans chaque ville mais je n'arrive pas en même temps à afficher le nom de la liste.  
 
En résumé, je veux connaître toutes les villes dans lesquelles la liste X arrive en tête...
 
Si quelqu'un pouvait m'aider...  
 
D'avance merci !


Salut,
Et comme ça, ça marcherait pas ?

Code :
  1. SELECT ville.id, ville.nom, lister.id, lister.nom, MAX(voix)
  2. FROM resultat
  3. JOIN lister ON resultat.id_liste = lister.id
  4. JOIN ville ON resultat.id_ville = ville.id
  5. GROUP BY ville.id, ville.nom, lister.id, lister.nom


J'ai pas testé je précise...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed