Essayes d'exécuter ta requête et de faire un echo tout simplement ou de faire ca :
Code:$variable=mysql_result($somme,0)
Version imprimable
Essayes d'exécuter ta requête et de faire un echo tout simplement ou de faire ca :
Code:$variable=mysql_result($somme,0)
elle me sert a recuperer l'id du truc non ?
si je l'enleve :
retourne : 1Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php $sql = "SELECT COUNT(nombre) as masomme FROM ( SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte INNER JOIN inscriptevent on inscriptevent.id_event = tablecompte.id_event GROUP BY inscriptevent.nombre order by COUNT(nombre) ASC"; $somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); $detail = mysql_fetch_array($somme); echo '<hr>'; echo $detail['masomme']; echo $donnees['titre']; ?>
Notice: Undefined variable: donnees in /home/groskane/public_html/matthieu/fr/best_event.php on line 52
En fait, avec ma requête, tu n'as plus besoin que d'une seule requête, donc:
Devient:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php $retour = mysql_query("SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive' "); while ($donnees = mysql_fetch_array($retour)){ $id_event = $donnees['id_event']; $sql = "SELECT COUNT(nombre) as masomme FROM ( SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte INNER JOIN inscriptevent on inscriptevent.id_event = $id_event GROUP BY inscriptevent.nombre order by COUNT(nombre) ASC"; $somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); $detail = mysql_fetch_array($somme); echo '<hr>'; echo $detail['masomme']; echo $donnees['titre']; } ?>
J'ai simplifié un peu l'affichage, mais en théorie, ça devrait fonctionner.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 $sql = "SELECT COUNT(nombre) as masomme FROM ( SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte INNER JOIN inscriptevent on inscriptevent.id_event = $id_event GROUP BY inscriptevent.nombre order by COUNT(nombre) ASC"; $retour = mysql_query($sql) or die(mysql_error()); while ($donnees = mysql_fetch_array($retour)){ echo "<hr>"; echo $donnees['masomme']; }
oui mais la du coup dans ton dernier code, je n'ai plus $id_event
du coup, comment tout recuperer ?
Dans la jointure, il y a $id_event, donc non à mon avis ca risque pas de marcher étant donné que la variable n'est déclarée nulle part.
Je pense qu'il faut simplement remplacer cette ligne :
par :Code:INNER JOIN inscriptevent on inscriptevent.id_event = $id_event
Code:INNER JOIN inscriptevent on inscriptevent.id_event = event.id_event
en mettantca me retourne : Unknown column 'event.id_event' in 'on clause'Code:event.id_event
Parce ce que j'ai mis ne doit pas correspondre à ce que tu à toi dans la base de données.
Dans ce cas, c'est parce que la colonne de la table event qui contient l'identificateur de l'événement ne s'appelle pas id_event. Regarde dans ta table et trouve le bon nom de champs ;).
heu si dans les deux tables j'ai bien id_event
Ah, c'est vrai, il faut que tu utilises l'alias de la table que tu as créé, donc:
tablecompte.id_event
donc ca nous fait :
mais le calcul ne semble pas juste, et $donnees['titre']; genere une erreur..Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?php $sql = "SELECT COUNT(nombre) as masomme FROM ( SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte INNER JOIN inscriptevent on inscriptevent.id_event = tablecompte.id_event GROUP BY inscriptevent.nombre order by COUNT(nombre) ASC"; $retour = mysql_query($sql) or die(mysql_error()); while ($donnees = mysql_fetch_array($retour)){ echo "<hr>"; echo $donnees['masomme']; echo $donnees['titre']; } ?>
$donnees['titre'] donne une erreur parce qu'il ne fait pas partie de la liste de champs que tu récupères de la Base de données.
Rajoute le simplement au début:
Pour ce qui est du résultat qui est erroné, il nous est difficile de pouvoir t'aider sans que tu sois un peu plus précis.Code:SELECT COUNT(nombre) as masomme, Titre FROM.....
bon :
voila les structures des deux tables :
la table inscriptevent
La table event :Code:
1
2
3
4
5
6
7
8
9 inscriptevent `id_inscription` `id_event` `username` `nombre` `participer` `voir` `valider`
le code :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 `id_event` `titre` `theme` `descriptif` `jour` `mois` `etat` `user` `adresse` `ville` `pays` `valider` `jourf` `moisf` `okfin` `place` `placedispo` `inscription` `img` `heure` `minute` `tag` `categorie` `annee` `anneef` `numero_group` `titre_base`
chaque fois qu'une personne s'inscrit a un évenement, ca rempli la table inscriptevent avec l'id de l'evenement et le nombre de personnes que la personne a inscrite avec elle.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?php $sql = "SELECT COUNT(nombre) as masomme, titre FROM ( SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte INNER JOIN inscriptevent on inscriptevent.id_event = tablecompte.id_event GROUP BY inscriptevent.nombre order by COUNT(nombre) ASC"; $retour = mysql_query($sql) or die(mysql_error()); while ($donnees = mysql_fetch_array($retour)){ echo "<hr>"; echo $donnees['masomme']; echo $donnees['titre']; } ?>
Le but du jeu est de ressortir tout les evenement avec a coté le nombre total de personnes inscrites a chaque evenement..
mais la .. :?
Ah, d'accord... je comprends mieux maintenant pourquoi tu faisais la somme et non le compte. Tu avais donc raison sur ce point... il fallait utiliser SUM ;).
et donc, pour aller chercher le titre, tu ajoutes:
Et en bout de ligne, $donnees['titre'] devrait arrêter de te faire une erreur.Code:SELECT SUM(nombre) as masomme, tablecompte.titre as titre FROM......
Modifie également la clause ORDER BY pour mettre SUM(nombre) à la place et on devrait être pas mal en business.
donc la ca semble plutot pas tout mal, mais encore tout a fait ca..
en fait j'ai l'impression qu'il ne prends pas tout en compte, se limite a quatre bizarement, et qu'il ne compte pas vraiment..
Voila le resultat : (le premier chiffre est ce qu'il a calculé) , je ne comprends pas pourquoi il prends partie time2 deux fois et dans la table des inscriptions j'ai huit évenements different..
la requete :Code:
1
2
3
4
5 2 partie time 2 4 essai avec editeur de texte 7 test ev 2 8 partie time 2
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $sql = "SELECT SUM(nombre) as masomme, tablecompte.titre as titre FROM ( SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte INNER JOIN inscriptevent on inscriptevent.id_event = tablecompte.id_event GROUP BY inscriptevent.nombre order by SUM(nombre) ASC"; $retour = mysql_query($sql) or die(mysql_error()); while ($donnees = mysql_fetch_array($retour)){ echo "<hr>"; echo $donnees['masomme']; echo $donnees['titre']; }
Il faudrait voir si l'état des autres événements est "publique" ou "privé", autrement il va les ignorer. Également, je me suis trompé dans la clause "group by" de la requête :oops:
C'est pas sur le nombre qu'on doit regrouper... mais sur l'ID de l'événement
Donc "GROUP BY nombre"
devient
GROUP BY inscriptevent.id_event
ha ouais,
bah la, nikel !!
merci !