Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2010, 09h21   #1
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
Par défaut calul SUM et tri

Bonjour

je fais une requete sur une table pour calculer le nombre de personnes inscrite a un événement, ca calcule très bien, mais ensuite je ne vois pas comment faire pour trier les résultat du plus grand au plus petit par exemple au niveau du résultat

Code :
1
2
3
4
 
$sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event'  ";
$somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); 
$detail = mysql_fetch_array($somme);
j'ai tenté de faire un order by masomme mais ca ne fonctionne pas

quelqu'un aurait il une idée s'il vous plait ?
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 09h40   #2
Membre actif
 
Avatar de Meloooo
 
Mélanie
Inscription : novembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Nom : Mélanie
Âge : 22

Informations forums :
Inscription : novembre 2008
Messages : 275
Points : 178
Points : 178
Code :
1
2
 
$sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '.$id_event' GROUP BY nombre ORDER BY masomme ASC";
Le group by ne prends pas les valeurs calculées, mais le order by oui donc je pense que comme ca devrait fonctionner.
Meloooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 09h48   #3
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
ca retourne bien un resultat, mais pas le bon, le calcul deviens faux..

Code :
$sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event' GROUP BY nombre ORDER BY masomme ASC";
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 09h54   #4
Membre actif
 
Avatar de Meloooo
 
Mélanie
Inscription : novembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Nom : Mélanie
Âge : 22

Informations forums :
Inscription : novembre 2008
Messages : 275
Points : 178
Points : 178
Hum, bizarre car je viens de le faire sur une de mes bases, et elle fonctionne, je te files un lien qui pourra peut être t'aider :
http://stackoverflow.com/questions/1...a-sum-in-mysql
Meloooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 09h59   #5
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
est-ce que ca peux venir du fait que ce soit dans une boucle ?

je met toute la page pour avoir une vue d'ensemble :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?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 SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event' GROUP BY nombre ORDER BY masomme ASC";
$somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); 
$detail = mysql_fetch_array($somme); 
echo '<hr>';
echo $detail['masomme'];
echo $donnees['titre'];
}
?>
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 10h00   #6
Membre actif
 
Avatar de Meloooo
 
Mélanie
Inscription : novembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Nom : Mélanie
Âge : 22

Informations forums :
Inscription : novembre 2008
Messages : 275
Points : 178
Points : 178
Explique nous, ce que fais ton code et plus précisément ta requête
Meloooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 10h08   #7
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
la premiere va selectionner tous les evenement de type publique ou privé, la seconde sert a calculer pour chaque evenement le nombre d'inscrit..
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 10h13   #8
Membre actif
 
Avatar de Meloooo
 
Mélanie
Inscription : novembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Nom : Mélanie
Âge : 22

Informations forums :
Inscription : novembre 2008
Messages : 275
Points : 178
Points : 178
Et tu ne peux pas faire qu'une seule requête ?
As-tu un lien entre la table event et inscripevent ?
Meloooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 10h14   #9
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
oui l'id_event est le meme
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 10h22   #10
Membre actif
 
Avatar de Meloooo
 
Mélanie
Inscription : novembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Nom : Mélanie
Âge : 22

Informations forums :
Inscription : novembre 2008
Messages : 275
Points : 178
Points : 178
Je pense que tu devrais faire sa en une seule requête, qui te permettra de calculer le nombre d'inscrit pour chaque évènement public ou privé.
Meloooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 10h25   #11
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
heu oui mais la...
Code :
1
2
3
4
5
6
 
 
SELECT DISTINCT t1.id_event, t1.username, t1.titre, t1.date, t2.usernamejoueurs, t2.joueurs, t2.roomies, t2.username
FROM event AS t1, inscriptevent AS t2 
ORDER BY rand() LIMIT 5
GROUP BY nombre ORDER BY masomme ASC
un truc du genre ?

mais le SUM je le colle comment la dedans ?
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 10h30   #12
Membre actif
 
Avatar de Meloooo
 
Mélanie
Inscription : novembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Nom : Mélanie
Âge : 22

Informations forums :
Inscription : novembre 2008
Messages : 275
Points : 178
Points : 178
Dans ton select.
Tu compte le nombre d'inscrit pour tous les évènements qu'il soit privé ou public.
Donc il te manque une condition (public ou privé)
Ensuite il te manque ta jointure entre les deux tables.
Et à mon avis dans ton select il ne doit pas connaitre ton "t1" et ton "t2" étant donné que tu le met dans ton from
Meloooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 14h02   #13
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
bon j'ai essayer dans tous les sens toute la matinée..

rien a faire .....

dès que je veux coller SUM dedans ca foire..
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 14h33   #14
Membre actif
 
Avatar de Meloooo
 
Mélanie
Inscription : novembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Nom : Mélanie
Âge : 22

Informations forums :
Inscription : novembre 2008
Messages : 275
Points : 178
Points : 178
Montre ta requête
Meloooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 14h37   #15
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Si je reprends ta requête originale:

Code :
1
2
 
$sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event'  ";
Si tu fais "order by masomme", de mon expérience ça ne passera effectivement pas... puisque tu utilises l'alias de la colonne. Donc, si tu veux faire un order by de la somme, tu dois faire comme ça:

Code :
1
2
 
$sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event' ORDER BY SUM(nombre) DESC";
Edit:

Si tu veux imbriquer tes deux requêtes, tu peux essayer un truc du genre:

Code :
1
2
3
4
5
6
7
8
9
 
 
SELECT COUNT(nombre) as masomme FROM inscriptevent 
 
INNER JOIN (
 
SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tblCeQueTuVeux on inscriptevent.id_event = tblCeQueTuVeux.id_event
 
WHERE inscriptevent.id_event = '$id_event' GROUP BY nombre ORDER BY COUNT(nombre) ASC
Aussi, si tu veux compter le nombre de personnes inscrites... c'est pas la fonction SUM que tu dois utiliser, mais la fonction COUNT (comme j'ai mis dans la requête).
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 14h40   #16
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
quand je fais ca :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$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 SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event' ORDER BY SUM(nombre) DESC";
$somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); 
$detail = mysql_fetch_array($somme); 
echo '<hr>';
echo $detail['masomme'];
echo $donnees['titre'];
}
tout s'affiche mais toujours pas trié
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 14h57   #17
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Bon, de nouveau moi... j'ai mieux regardé le problème et je crois que cette solution serait plus appropriée:

Code :
1
2
3
4
5
6
7
8
9
 
 
SELECT COUNT(nombre) as masomme FROM (
 
SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tblCeQueTuVeux on inscriptevent.id_event = tblCeQueTuVeux.id_event) as tblCeQueTuVeux
 
INNER JOIN inscriptevent on inscriptevent.id_event = tblCeQueTuVeux.id_event
GROUP BY inscriptevent.nombre
order by COUNT(nombre) ASC
Encore ici, j'ai utilisé COUNT au lieu de SUM, car ce que j'ai compris c'est que tu veux compter le nombre de personnes inscrites alors c'est cette fonction qui est la plus appropriée... mais ça dépend toujours ce ce que tu veux faire évidemment.

En espérant que cette fois-ci sera la bonne, bonne chance
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 15h08   #18
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
alors la.. je ne comprends pas la requete


Code :
1
2
3
4
5
6
7
8
$sql = "SELECT COUNT(nombre) as masomme FROM (
 
SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS $id_event on inscriptevent.id_event = $id_event) as $id_event
 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);
ca me retourne une erreur, je ne comprends pas bien a quoi servent les different as..
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 15h25   #19
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Essentiellement, on fait un SELECT sur un autre SELECT (d'où le terme de requête imbriquée).

Le premier SELECT externe, soit SELECT count(nombre) va aller puiser ses données dans le résultat de la requête interne, soit SELECT * FROM event à la place d'une table normale.

Cependant, comme la requête interne n'a pas de nom officiel, il faut lui donner un alias afin que la requête externe puisse y faire référence, d'où le "AS tblCeQueTuVeux" qui permet ultimement de dire qu'on est en train de faire référence aux champs de la requête interne grâce à la syntaxe tblCeQueTuVeux.champQuelconque

De plus, sur ta requête, tu as un petit problème avec la requête interne. Cette ligne:

Code :
(SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS $id_event on inscriptevent.id_event = $id_event) as $id_event
Devrait plutôt être:

Code :
1
2
 
(SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tblCeQueTuVeux
L'alias que tu donnes à ta requête doit être FIXE, STATIQUE, n'utilises pas de nom de variable ici, ça ne fonctionnera pas.

Bon, je crois que c'est tout. Si tu as d'autres questions, n'hésite pas
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 15h37   #20
Futur Membre du Club
 
Inscription : mai 2009
Messages : 224
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 224
Points : 18
Points : 18
donc on résume :

j'ajoute un nom de table inexistant pour creer ma requete ce qui donne :

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'];
}
?>
aucune erreur retourné, par contre du coup le calcul n'est pas bon, mais la a mon avis c'est juste parce que je ne vois pas comment afficher le COUNT
groskanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h55.


 
 
 
 
Partenaires

Hébergement Web