Page 1 sur 2
Tri et compte sur un champ donné
Posté : 29 oct. 2007, 12:19
par Noubinours
Bonjour,
Je n'arrive pas à faire un truc tout simple et je ne sais pas s'il s'agit d'une requête imbriquée ou pas.
J'ai fait un p'tit jeu tout simple et je voudrais faire une requête qui me donne le nombre de participants par ville.
Soit 3 tables avec champs en jointure : concours (id_c, id_j,score_c), joueurs (id_j,pre_j,nom_j,id_vj), ville(id_v,nom_v).
Comment faire pour le tri final ?
Merci à vous
Noubinours
Posté : 29 oct. 2007, 12:26
par Truc
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".
Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.
Posté : 29 oct. 2007, 12:27
par Truc
Essaie avec:
Code : Tout sélectionner
SELECT c.id_c, v.nom_v, COUNT(c.id_j) as nb
FROM concours c JOIN joueurs j USING (id_j)
JOIN ville v ON j.id_vj = v.id_v
GROUP BY c.id_c, v.id_v
ORDER BY c.id_c
Posté : 29 oct. 2007, 13:51
par Noubinours
J'ai essayé ton script sans tout comprendre lol, car moi c'est plutôt ça mon script, le vrai :
$query = "SELECT * FROM ville,concours,joueur WHERE concours.id_joueur = joueur.id_joueur AND joueur.id_ville = ville.id_ville GROUP BY ville.nom_ville";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
$parville = $row["id_ville"];
$query2 = "SELECT * FROM ville,concours,joueur WHERE concours.id_joueur = joueur.id_joueur AND joueur.id_ville = ville.id_ville AND ville.id_ville = $parville GROUP BY ville.id_ville ORDER BY ville.nom_ville";
$result2 = mysql_query($query2);
$parville = mysql_num_rows($result2);
echo $row["nom_ville"]." : ".$parville."<br />";
}
mais les 2 ne fonctionnent pas :/
Qu'est-ce qui cloche Truc ?
Noub
Posté : 29 oct. 2007, 14:04
par Truc
Ce n'est pas un script ce que j'ai proposé mais une requête que tu peux tester directement dans phpmyadmin ou autre.
Vérifie le résultat s'il correspond à ce que tu attendais ou non.
Posté : 29 oct. 2007, 14:18
par Invité
Hé bien ca me marque :
#1109 - Unknown table 'c' in field list

Posté : 29 oct. 2007, 14:21
par Truc
Et tu as repris la même requete ?
Le message dis qu'il n'y a pas de table "c" or il y a bien un alias de définis "FROM concours c"
EDIT : enfaite je me rends compte que tu n'as pas donné les vrais nom de champs d'où l'interet de suivre les conseils "poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction "CREATE TABLE""
Posté : 29 oct. 2007, 15:29
par noubinours
C'est pas grave reprenons plus simplement les champs qui nous intéressent.
table concours (id_concours, joueur_concours //clef étrangère id de la table joueur)
table joueur (id_joueur, prenom_joueur, nom_joueur, ville_joueur //clef étrangère id de la table ville)
table ville (id_ville, nom_ville // RAS, complète)
A la fin, on veut savoir par rapport aux joueurs qui ont joué ou pas au dernier concours, d'où ils proviennent et on répertorie ainsi les x parisiens, les y lyonnais et les z marseillais.
C'est mieux comme explication ?
noubinours
Posté : 29 oct. 2007, 16:12
par Truc
La requête reste la même tu dois juste l'adapter à tes champs sans oublier les alias
Posté : 29 oct. 2007, 17:19
par noubinours
De nouveau moi Truc,
Ca me met l'erreur suivante :
#1054 - Unknown column 'mgworld.c.id_joueur' in 'on clause'. (mgworld est le nom de la base)
Ce problème commence à me rendre dingue alors que ca me parrait pourtant pas bien sorcier :'(
noubinours
Posté : 29 oct. 2007, 17:24
par Ryle
Et on peut voir la requête modifiée qui génère ce message pour éventuellement te dire ce qui ne va pas dedans ou c'est top secret ?

Posté : 05 nov. 2007, 15:59
par Noubinours
Bonjour,
Me voilà de retour après quelques jours d'absence informatique.
Non non, il n'y a rien de top secret
Ci-dessous la requête repiquée et adaptée :
Code : Tout sélectionner
SELECT concours.id_concours, ville.nom_ville, COUNT(concours.id_joueur) as nb
FROM concours c JOIN joueurs j USING (id_joueur)
JOIN ville v ON j.id_ville = v.id_ville
GROUP BY c.id_concours, v.id_ville
ORDER BY c.id_concours
Je ne crois pas m'être trompé.
Merci de votre aide.
Noubinours
Posté : 05 nov. 2007, 16:13
par Truc
Et toujours le même message d'erreur ?
"concours" doit être remplacé par son alias "c" ou ne pas créer d'alias.
Posté : 05 nov. 2007, 16:23
par Noubinours
Re et merci,
En mettant les alias, ca me met :
#1054 - Unknown column ''mgworld.c.id_joueur' in 'on clause' (mgworld est le nom de la base)
Vous savez pourquoi ???
Noubi'
Posté : 05 nov. 2007, 16:29
par Truc
Poste le schéma de tes tables sous forme de "CREATE table ...."
Tu as bien un "id_joueur" dans les tables concours et joueurs ?