Tri et compte sur un champ donné

Noubinours
Invité n'ayant pas de compte PHPfrance

29 oct. 2007, 12:19

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 oct. 2007, 12:26

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 oct. 2007, 12:27

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Noubinours
Invité n'ayant pas de compte PHPfrance

29 oct. 2007, 13:51

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 oct. 2007, 14:04

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

29 oct. 2007, 14:18

Hé bien ca me marque :

#1109 - Unknown table 'c' in field list

:(

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 oct. 2007, 14:21

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""

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

noubinours
Invité n'ayant pas de compte PHPfrance

29 oct. 2007, 15:29

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 oct. 2007, 16:12

La requête reste la même tu dois juste l'adapter à tes champs sans oublier les alias

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

noubinours
Invité n'ayant pas de compte PHPfrance

29 oct. 2007, 17:19

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 oct. 2007, 17:24

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 ? ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Noubinours
Invité n'ayant pas de compte PHPfrance

05 nov. 2007, 15:59

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 nov. 2007, 16:13

Et toujours le même message d'erreur ?

"concours" doit être remplacé par son alias "c" ou ne pas créer d'alias.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Noubinours
Invité n'ayant pas de compte PHPfrance

05 nov. 2007, 16:23

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'

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 nov. 2007, 16:29

Poste le schéma de tes tables sous forme de "CREATE table ...."

Tu as bien un "id_joueur" dans les tables concours et joueurs ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute