Select *, count (ID) group by ID

cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 - 15 déc. 2009 à 17:32
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 16 déc. 2009 à 20:03
Hello,

je voudrais compter le nombre de lignes que me renvoie ma requête, comme ceci:

$req = "SELECT *, COUNT(*) as NB  FROM f1media WHERE 1=1"; 
if(!empty($_POST['nom_fichier']))
{
if($_POST['nom_fichier'] == '*')
$req .= " AND nom_fichier NOT LIKE  '".$_POST['nom_fichier']."' ";
else
$req .= " AND nom_fichier LIKE '%".$_POST['nom_fichier']."%' ";
}


(..suivent d'autres conditions identiques)

$req.= "GROUP BY ID";
$result = mysql_query($req)
            or die ("Couldn't execute query.");
$donnee=mysql_fetch_array($result) ;
$numRec = $donnee['NB'];


Malheureusement, j'obtiens toujours 1

J'ai donc séparé les requêtes, et ca marche.
Mais j'aimerais autant que ca marche dans une seule requête, merci

3 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
15 déc. 2009 à 20:51
Salut,

On ne peut pas mettre de select * avec un group by

c'est pas tres logique il faut mettre des champs d'aggregation max,min, cout ,sum
ou les champs du group by dans le select

exemple

select rue, count(*) as nb
from dbo.Adresse
group by rue

attention l'ordre du group by est important

select rue, count(*) as nb , cp
from dbo.Adresse
group by rue, cp

et

select rue, count(*) as nb, cp
from dbo.Adresse
group by cp, rue

Ne donnerons pas le meme resultat
car le prmier group par rue et le second par cp dans un premier temps.

Bon dev
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
16 déc. 2009 à 09:33
Merci pour ta réponse,

$req = "SELECT ID,  COUNT(*)  as NB FROM f1media WHERE 1=1"
..
$req.= "GROUP BY ID";



donne 1


$req = "SELECT *,  COUNT(*)  as NB FROM f1media WHERE 1=1"; 


ne marche pas
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
16 déc. 2009 à 20:03
C'est ce qui est dit plus haut, quand il y a une instruction d'aggregation (count,avg, sum,max,min, ...)
il faut specifier en clair les champs.

Pour pousser un peu plus loin la réflexion, si une formule est utilise il faut la mettre dans le group by aussi
ici annee_construction ne peut etre mis dans le group by sur sql server( il me semble et c'est la meme chose pour les autres SGBDR)

select rue, count(*) as nb, year(dateconstruction) as annee_construction
from dbo.Adresse
group by rue ,year(dateconstruction)
0
Rejoignez-nous