la requete qui se rebelle - SQL/NoSQL - Programmation
Marsh Posté le 21-02-2005 à 09:08:18
SELECT station, COUNT(*) As nbVotes
FROM stations
GROUP BY station
ORDER BY COUNT(*) DESC
c'est ça ce que tu veux ?
Marsh Posté le 21-02-2005 à 09:14:53
remarque : enregistrer l'IP d'un visiteur est soumis à l'aval de la CNIL
Marsh Posté le 21-02-2005 à 09:16:40
nbVotes correspond à quoi ? Il faut le calculer non ?
C'est l'addition de toutes les valeurs identiques dans la colonne station. C'est pas SUM station ?
Marsh Posté le 21-02-2005 à 09:17:33
va falloir réviser ton SQL
COUNT c'est pour compter
SUM c'est pour additionner
Marsh Posté le 21-02-2005 à 09:22:00
C'est gentil mais ton lien est tout en anglais. SQL je l'ai appris à la fac y a 2 ans alors du coup je me rappelle pas de tout... Mais tout ça repond pas à ma question. C'est quoi nbVotes ?
Marsh Posté le 21-02-2005 à 09:26:08
4emedimension a écrit : C'est gentil mais ton lien est tout en anglais. SQL je l'ai appris à la fac y a 2 ans alors du coup je me rappelle pas de tout... Mais tout ça repond pas à ma question. C'est quoi nbVotes ? |
nbVotes c'est le résultat du COUNT, c'est-à-dire pour chaque station identique dans la base le nombre de lignes correspondantes
Marsh Posté le 21-02-2005 à 14:35:18
Ca ne marche pas !
Erreur SQL !
SELECT id FROM stations
Invalid use of group function
Mon site est hebergé par multimania. Est ce que ça change quelque chose ?
Marsh Posté le 21-02-2005 à 15:57:10
Erreur SQL !
SELECT id FROM stations
Invalid use of group function
=> C quoi l'ordre SQL initial ?
Marsh Posté le 21-02-2005 à 19:43:27
J'ai 2 requetes :
$sql = "SELECT id FROM stations";
Pour le nombre de participants.
$sql2 = "SELECT station, COUNT(*) As nbVotes
FROM stations
GROUP BY station
ORDER BY COUNT(*) DESC ";
Pour voir le détail des votes suivant chaque station.
Je sais pas si j'ai repondu à ta question.
Au fait comment fait on pour que $sql2 rende un tableau de 2 colonnes avec dans la première le nom de la station et dans la seconde le nb de vote pour cette dernière ?
Marsh Posté le 22-02-2005 à 07:39:19
Je connais pas Mysql mais niveau syntaxe Sql
ça me parait Ok
Tu peux aussi essayer ça
=>
SELECT station, COUNT(*) As nbVotes
FROM stations
GROUP BY station
ORDER BY 2 DESC
Le 2 indiquant que tu veux trier sur le 2 ème champ
du select ... au cas ou le count(*) dans ton Order by poserait pb ?!
Sinon tu peux poser ta question là
=> http://www.developpez.com/
(dans le forum approprié)
Marsh Posté le 22-02-2005 à 09:30:44
[quote=988064,0,7,224955]C'est gentil mais ton lien est tout en anglais. SQL je l'ai appris à la fac y a 2 ans alors du coup je me rappelle pas de tout... Mais tout ça repond pas à ma question. C'est quoi nbVotes ?[/quote] Programmation rime avec Anglais
Marsh Posté le 22-02-2005 à 13:21:41
Je me demande si mon probleme ne vient pas de l'affichage du résultat.
Voilà ce que me propose qq'un d'autre sur un forum :
$sql2 = "SELECT SUM(id) AS nb, station FROM stations ORDER BY station ASC";
while ($row = mysql_fetch_row(mysql_query($sql2))) {
echo "La station ".$row[1]." à reçu ".$row[0]." votes<br>\n";
}
Mais quand je met ce qu'il me propose rien n'apparais comme résultat. Quand je met la requete :
SELECT station, COUNT(*) As nbVotes
FROM stations
GROUP BY station
ORDER BY 2 DESC
J'ai un probléme avec le while qui tourne indéfiniment. J'ai essayé de mettre while ($row != mysql_fetch_row(mysql_query($sql2)))
mais ça change rien...
Je suis en train de craquer !!!!!
Marsh Posté le 22-02-2005 à 13:29:59
SELECT SUM(id) AS nb, station FROM stations ORDER BY station ASC
Cette requête là n'est pas bonne. Ca additionne les id de ta table, ce qui ne veut rien dire.
Si t'as 3 enregistrements avec les id auto incrémentés 1,2,3 tu obtiens 6...
Marsh Posté le 22-02-2005 à 13:32:57
SELECT station, COUNT(*) As nbVotes FROM stations GROUP BY station ORDER BY 2 DESC
Celle là est correcte
Par contre ton affichage du résultat n'est pas bon.
J'suis pas un maitre de mysql mais essaye plutôt quelque chose comme ça :
$result = mysql_query("SELECT station, COUNT(*) As nbVotes FROM stations GROUP BY station ORDER BY 2 DESC" )
while($row = mysql_fetch_row($result) {
echo ...
}
Dans ton affichage tu appelles à chaque fois la fonction mysql_query qui exécute la requête.
Donc à chaque boucle tu affiches la 1ère ligne du résultat, et c'est sans fin !
Marsh Posté le 22-02-2005 à 13:37:56
Je viens de refaire un test avec :
$sql2 = "SELECT COUNT(*),station As nbVotes
FROM stations
GROUP BY station
ORDER BY 2 DESC";
while ($row = mysql_fetch_row(mysql_query($sql2))) {
echo "La station ".$row[1]." à reçu ".$row[0]." votes<br>\n";
}
Ca marche presque. Il y a juste une erreur avec le "while". On arrive pas a sortir de la boucle.
Marsh Posté le 22-02-2005 à 13:46:07
c'est logique, tu refais la requete a chaque fois que tu boucle
faut sortir le mysql_query hors de la condition...
Marsh Posté le 22-02-2005 à 13:48:35
[quote=989759,0,18,224955]Je viens de refaire un test avec :
$sql2 = "SELECT COUNT(*),station As nbVotes
FROM stations
GROUP BY station
ORDER BY 2 DESC";
while ($row = mysql_fetch_row(mysql_query($sql2))) {
echo "La station ".$row[1]." à reçu ".$row[0]." votes<br>\n";
}
Ca marche presque. Il y a juste une erreur avec le "while". On arrive pas a sortir de la boucle.[/quote]
Zieute ma réponse juste avant
Remplace $sql2 = "SELECT ... par $sql2 = mysql_query("SELECT ...
et mysql_fetch_row(mysql_query($sql2)) par mysql_fetch_row($sql2)
Marsh Posté le 22-02-2005 à 14:02:12
Ca y est ca marche !!!
Je tiens a remercier tout ceux qui m'ont aider.
Et je met ci dessous mon exemple (qui marche) pour tout ceux qui cherche (et qui chercherons) une telle requete et son affichage :
$sql = "SELECT id FROM stations";
$requete = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$nombre = mysql_num_rows($requete);
echo "$nombre personnes ont voté.";
$result = mysql_query("SELECT station, COUNT(*) As nbVotes FROM stations GROUP BY station ORDER BY 2 DESC" );
while($row = mysql_fetch_row($result)) {
echo "La station ".$row[1]." à reçu ".$row[0]." votes<br>\n";
}
Marsh Posté le 23-02-2005 à 11:57:31
Indépendamment du code, si c'est l'utilisateur qui saisit lui même sa station, il faut penser qu'une même station peut être écrite de plusieurs manières différentes : Casse (Majucules/Minuscules), trait d'union, espaces...
Si une personne saisit "Chamonix" et une autre "chamonix" ou "CHAMONIX" ou " Chamonix "... ça fera 2 stations différentes dans ta requête
Marsh Posté le 23-02-2005 à 14:13:33
Pas de problème pour ça. Dans mon formulaire on choisit la station à l'aide de bouton de type radio. Donc de ce coté là c'est bon.
Marsh Posté le 21-02-2005 à 09:02:38
Voilà mon probleme :
Il est possible (enfin quand ça marchera) sur mon site de voter pour sa station de ski favorite. Le tout rentre dans la table suivante :
table stations
id int(11) primary key auto_increment;
station varchar(128);
ip int(10);
date date;
Je voudrai une requete qui me rende le nom de la station et le nombre de vote pour cette dernière. Le tout dans l'ordre décroissant. J'ai dejà demandé sur plusieurs forum et personne n'a pu m'aider.
Si quelqu'un avait idée ?