Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 08/01/2013, 14h00   #1
Loupita
Invité régulier
 
Homme
Ingénieur de déploiement réseaux
Inscription : avril 2012
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur de déploiement réseaux

Informations forums :
Inscription : avril 2012
Messages : 74
Points : 9
Points : 9
Par défaut Requete SELECT + COUNT

Bonjour,

je ne parviens pas à coder correctement la requête suivante:
Code :
$sql = "SELECT *, COUNT (official_code) FROM instruments WHERE official_code = '%**'";
le but de la requête:
1/ sélectionner tous les enregistrements contenant ** dans la table "instruments"
2/ les compter
3/ afficher la valeur du compteur

Si l'un d'entre vous dispose d'un peu de temps pour m'aider.

Merci.
Loupita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 16h29   #2
chtig
Membre Expert
 
Inscription : janvier 2007
Messages : 1 331
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 331
Points : 1 561
Points : 1 561
Juste
Code :
1
2
 
$sql = "SELECT COUNT(*) FROM instruments WHERE official_code like '%**%'";
non ? Ou alors je n'ai pas compris ...

P.S. : attention au deuxième % pour autoriser des caractères après, et au like et non = pour matcher
__________________
Program manager chez TraceOne. http://www.traceone.com
chtig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 09h59   #3
Gannox
Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 89
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 89
Points : 65
Points : 65
Dans ce genre la ?

Code php :
$sql = "SELECT official_code, COUNT(official_code) FROM instruments WHERE official_code LIKE '%**%' GROUP BY official_code";

Ta requête SQL n'utilise pas une syntaxe valide, un problème du même type : http://stackoverflow.com/questions/3...ount-in-sqlite
Gannox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 15h23   #4
Loupita
Invité régulier
 
Homme
Ingénieur de déploiement réseaux
Inscription : avril 2012
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur de déploiement réseaux

Informations forums :
Inscription : avril 2012
Messages : 74
Points : 9
Points : 9
Bonjour

merci a vous deux pour vos réponses. Finalement j'utilise la requete de cette manière:
Code :
"SELECT *, COUNT(official_code) FROM instruments WHERE official_code LIKE '%**%' GROUP BY official_code"
elle fonctionne mais comment afficher le résultat de la requète COUNT...
Loupita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 18h48   #5
Exia93
Membre Expert
 
Homme
Étudiant
Inscription : avril 2012
Messages : 606
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2012
Messages : 606
Points : 1 058
Points : 1 058
Bonsoir,

Code :
SELECT *, COUNT(official_code) FROM instruments WHERE official_code LIKE '%**%' GROUP BY official_code
cette requête la ne fonctionne pas comme tu l'imagine,

les colonnes que tu spécifie dans le select ('*') mais que tu ne spécifie pas dans le groupe by auront des valeurs aléatoires (toutes les colonnes de ta table autre que offical_code et le COUNT(*)),

MySQL ne te renvoi pas d'erreur car est très permissif ce qui n'est pas bien, car les valeur seront fausse.

De plus il faut renommer la colonne COUNT().

Ta requête écrite correctement :
Code :
1
2
3
SELECT official_code, COUNT(official_code) nombre FROM instruments
WHERE official_code LIKE '%**%'
GROUP BY official_code
Exia93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 09h13   #6
Loupita
Invité régulier
 
Homme
Ingénieur de déploiement réseaux
Inscription : avril 2012
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur de déploiement réseaux

Informations forums :
Inscription : avril 2012
Messages : 74
Points : 9
Points : 9
Bonjour,

Cette partie me sert comme tu l'as bien compris a récupérer d'autre champs que j'affichent dans un tableau.
j'ai donc adapté la requète à mes besoin de la façon suivante:
Code :
1
2
3
4
"SELECT official_code,instr_code,instr_type,description,default_cur,risk_level,
COUNT(official_code) nombre FROM instruments
WHERE official_code LIKE '%**%'
GROUP BY official_code";
Mon dernier soucis reste l'affichage de la valeur retournée par COUNT...

merci de ton aide.
Loupita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 10h02   #7
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Comme déjà expliqué par Exia, toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de groupage doivent figurer dans le GROUP BY sous peine de voir des valeurs aléatoires pour les colonnes manquantes.

Si, pour un official_code, tu n'as qu'une seule valeur dans les colonnes instr_code,instr_type,description,default_cur,risk_level, alors la bonne requête est la suivante :
Code sql :
1
2
3
4
5
SELECT official_code, instr_code, instr_type, description, default_cur, risk_level,
	COUNT(official_code) nombre
FROM instruments
WHERE official_code LIKE '%**%'
GROUP BY official_code, instr_code, instr_type, description, default_cur, risk_level

Pour ce qui est de l'affichage, c'est à traiter côté PHP en récupérant la colonne "nombre" du résultat de la requête.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 10h18   #8
Loupita
Invité régulier
 
Homme
Ingénieur de déploiement réseaux
Inscription : avril 2012
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur de déploiement réseaux

Informations forums :
Inscription : avril 2012
Messages : 74
Points : 9
Points : 9
Citation:
c'est à traiter côté PHP en récupérant la colonne "nombre" du résultat de la requête
je ne sais pas comment récupérer cette valeur...
Loupita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 10h49   #9
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Traitement classique côté contrôleur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$sql = "
	SELECT official_code, instr_code, instr_type, description, default_cur, risk_level,
		COUNT(official_code) nombre
	FROM instruments
	WHERE official_code LIKE '%**%'
	GROUP BY official_code, instr_code, instr_type, description, default_cur, risk_level
";
$result = mysql_query($sql);
 
while($row = mysql_fetch_array($result))
{
	$instruments["{$row["official_code"]}"]['instr_code'] = $row['instr_code'];
	$instruments["{$row["official_code"]}"]['instr_type'] = $row['instr_type'];
	$instruments["{$row["official_code"]}"]['description'] = $row['description'];
	$instruments["{$row["official_code"]}"]['default_cur'] = $row['default_cur'];
	$instruments["{$row["official_code"]}"]['risk_level'] = $row['risk_level'];
	$instruments["{$row["official_code"]}"]['nombre'] = $row['nombre'];
}
Traitement côté vue :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// Avant ça il y a bien sûr le début du tableau en HTML
foreach($instruments as $official_code => $instrum)
{
?>
	<tr>
		<td><?php echo $instrum['instr_code']; ?></td>
		<td><?php echo $instrum['instr_type']; ?></td>
		<td><?php echo $instrum['description']; ?></td>
		<td><?php echo $instrum['default_cur']; ?></td>
		<td><?php echo $instrum['risk_level']; ?></td>
		<td><?php echo $instrum['nombre']; ?></td>
	</tr>
<?php
}
?>
</table>
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2013, 11h58   #10
Loupita
Invité régulier
 
Homme
Ingénieur de déploiement réseaux
Inscription : avril 2012
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur de déploiement réseaux

Informations forums :
Inscription : avril 2012
Messages : 74
Points : 9
Points : 9
Merci pour ces explications et le code auquel j'ai apporté quelques modifications pour intégration.
bon week-end.
Loupita est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h22.


 
 
 
 
Partenaires

Hébergement Web