requete group by ?

requete group by ? - SQL/NoSQL - Programmation

Marsh Posté le 21-07-2005 à 08:35:31    

bonjour,
 
 
je suis pas encore un dieu en php et coince sur une requete .
en fait dans une table je liste pour chaque jour les ventes d'abonnement pour notre club - y'a trois types de prix possibles
ainsi j'ai comme enregistrement
le jour        et le prix  
 
2005-06-16 11:32:40 - 10
2005-06-16 11:41:11 - 26
2005-06-16 11:44:05 - 13
2005-06-16 12:04:21 - 26
2005-06-16 12:40:06 - 13
2005-06-17 15:05:48 - 13
2005-06-17 14:15:51 - 26  
 
et je voudrais faire une requete me permettant d'obtenir comme résultat :
 
2005-06-16 - 3 abo à 10 > 8 abos à 13 > 6 abos à 26
 
ainsi pour chaque jour ...  
 
j'essaye avec un group by .. :
 
$result=mysql_query("SELECT basket.id_bask,basket.ref_seat,basket.prix,users.date FROM basket LEFT JOIN users ON basket.id_user=users.id_user WHERE users.nom!='' GROUP BY basket.prix ORDER BY users.date ASC" );
 
mais çà marche pas .. le COUNT doit être là aussi je pense mais comment ?  
 
$result=mysql_query("SELECT basket.id_bask,basket.ref_seat,basket.prix,COUNT basket.prix AS ct,users.date FROM basket LEFT JOIN users ON basket.id_user=users.id_user WHERE users.nom!='' GROUP BY basket.prix ORDER BY users.date ASC" );
 
 çà marche pas mieux  
 
si vous avez une idée .. merci de me faire avancer
 
jhac

Reply

Marsh Posté le 21-07-2005 à 08:35:31   

Reply

Marsh Posté le 21-07-2005 à 09:04:18    

select jour,prix,count(*)
from tatable
group by jour,prix
 
si ta date contient aussi l'heure :
 
 
select left(jour,10),prix,count(*)
from tatable
group by left(jour,10),prix

Reply

Marsh Posté le 21-07-2005 à 09:30:09    

merci.. j'arrive maintenant à avoir la liste groupée par prix mais quand je met le count(*) j'ai une erreur  
 
comment tu récupéres le count dans la réponse ?
merci

Reply

Marsh Posté le 21-07-2005 à 10:58:42    

ben comme precise plus haut

Reply

Marsh Posté le 21-07-2005 à 17:20:05    

en fait si tu fais count(*) .. comment tu affiches le résult puisque count tappes sur l'ensemble  
 
si je fais :
 
$result=mysql_query("SELECT prix,date,COUNT(prix) AS cnt FROM basket LEFT JOIN users ON basket.id_user=users.id_user WHERE users.nom!='' GROUP BY basket.px" );
 
while ($lg=mysql_fetch_object($result))
{
echo"- $lg->prixx - cnt = $lg->cnt<br />";
}
il affiche pas x abo  à tel prix tel jour ..  
j'ai :  
 2005-06-15 10:39:06 - 13 - cnt = 601
2005-06-15 10:39:06 - 10 - cnt = 33
2005-06-15 11:03:59 - 26 - cnt = 425
2005-06-17 08:54:02 - 46 - cnt = 18
2005-06-24 18:00:35 - 31 - cnt = 7

Reply

Marsh Posté le 21-07-2005 à 19:00:09    

nan, count(*) porte sur les tuples spécifiés dans la clause group by
 
donc tu remets "prix, date" dans ton group by
 
sinon, je ne sais pas ce qu'a fumé ton SGBD, parceque ta requête telle que tu l'as écrite devrait planter : le GROUP BY doit porter OBLIGATOIREMENT AU MOINS sur la liste des champs ne participant pas à une fonction de regroupement. Dans ton cas, "prix" et "date" doivent obligatoirement être dans la clause group by, c'est la norme SQL qui veut ça.
Bizarre que ton sgbd ne plante pas.

Reply

Marsh Posté le 22-07-2005 à 19:07:32    

désolé mais je comprends pas si je fais :  
COUNT(prix) AS cnt  
je le récupère dans la réponse par  
while ($lg=mysql_fetch_object($result))
{
echo"- $lg->prix - cnt = $lg->cnt<br />";
}  
mais en faisant count(*)
comment récupérer cette  valeur puisque t'a pas de AS ..  
 
merci
 

Reply

Marsh Posté le 24-07-2005 à 08:46:34    

Citation :


Bizarre que ton sgbd ne plante pas.


 
rassure toi , pour une telle requete son SGBD doit planter
 

Citation :


désolé mais je comprends pas si je fais :  
COUNT(prix) AS cnt  
je le récupère dans la réponse par  
while ($lg=mysql_fetch_object($result))  
{  
echo"- $lg->prix - cnt = $lg->cnt<br />";  
}  
mais en faisant count(*)  
comment récupérer cette  valeur puisque t'a pas de AS ..  
 
merci  
 


ca c'est deja du php:
 

Code :
  1. $rsql="select jour,prix,count(*)
  2.         from tatable
  3.         group by jour,prix ";
  4. if(!$resultat_sql = mysql_query($rsql,$connexion) )
  5. {
  6.   echo "Erreur de requete ";
  7.   exit;
  8. }
  9. while($ligne = mysql_fetch_row($resultat_sql))
  10. {
  11. $jour = $ligne[0];
  12. $prix = $ligne[1];
  13. $cnt  = $ligne[2];
  14. //...Fais les echos que tu veux avec tes elements ici
  15. }

Reply

Marsh Posté le 24-07-2005 à 18:46:10    

ok ... et en le faissant çà me donne vraiment ce que je souhaite, si je fais  :
 $result=mysql_query("SELECT users.date,basket.prix,COUNT(*) FROM basket LEFT JOIN users ON basket.id_user=users.id_user WHERE users.nom!='' GROUP BY basket.prix,users.date" );
 
while ($lg=mysql_fetch_row($result))
{
$jour = $lg[0];
 $prix = $lg[1];
 $cnt  = $lg[2];
echo" $jour > $prix - $cnt <br />";  
}
j'obtiens :  
 2005-06-15 10:39:06 > 13 - 1
2005-06-15 11:36:18 > 10 - 3
2005-06-15 12:40:21 > 10 - 1
2005-06-16 10:59:56 > 10 - 1
2005-06-16 11:21:53 > 26 - 1
2005-06-16 11:32:40 > 10 - 1
2005-06-16 11:44:05 > 10 - 2
2005-06-16 14:19:16 > 10 - 2
2005-06-16 14:39:27 > 10 - 1
2005-06-16 14:45:33 > 10 - 1
2005-06-16 14:47:38 > 10 - 1  
et ainsi pour chaque enregsitrement ..
alors que je voudrais faire le total par jour et avoir  
 
par ex :  
2005-06-16  
8 à 26  
5 à 13
 
 
et ainsi pour chaque jour ..
merci de vos réponses ..  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed