Récuperer le nombre de rangées pour chaque DISTINCT dans une table
2 réponses
max
Bonjour à tous,
Dans un programme PHP, j'essaie de récupérer des rangées dans une table
MYSQL selon une "clé" distincte composée de trois champs. Autrement dit,
j'ai une table avec plus centaines de rangées et je veux regrouper
certaines rangées selon trois champs particuliers (132, 142 et 138).
Je suis en mesure de récupérer les rangées distinctes selon les trois
clés mais pas de compter les occurrences de chaque regroupement.
Par exemple, ma table contient les valeurs suivantes:
TABLE
field_132 field_142 field_138
1 A 7
1 A 7
1 A 7
1 A 8
1 A 8
1 A 6
1 A 6
1 B 8
1 B 8
1 B 8
1 B 8
Le résultat que je recherche est le suivant:
- field_132 = 1, field_142 = A, field_138 = 7 (nombre = 3)
- field_132 = 1, field_142 = A, field_138 = 8 (nombre = 2)
- field_132 = 1, field_142 = A, field_138 = 6 (nombre = 2)
- field_132 = 2, field_142 = B, field_138 = 8 (nombre = 4)
C'est à dire une façon dans PHP de récupérer à la fois chaque
regroupement par les trois clés mais aussi le nombre de rangées à
l'origine du regroupement.
Bien entendu, les valeurs des champs au dessus sont des exemples, et je
ne sais à l'avance ni le nombre de rangées de la table ni le contenu des
champs. La logique de l'application veut que je regroupe les rangées par
la clé distincte des trois champs, c'est tout.
Mon code est le suivant:
===================================================================
$sql_file = "SELECT distinct field_132, field_142, field_138 FROM
`table` WHERE (filename='".$impd_file."') ORDER BY field_132 ASC,
field_142 ASC, field_138 ASC";
$res_file = mysql_query($sql_file) or die ("MESSAGE");
while ( $row_file = mysql_fetch_array($res_file) ) {
etc...
}
=================================================================
J'ai tenté ceci mais cela n'a pas fonctionné
===================================================================
$sql_file = "SELECT distinct field_132, field_142, field_138, count(*)
as compte FROM `table` WHERE (filename='".$impd_file."') ORDER BY
field_132 ASC, field_142 ASC, field_138 ASC";
$res_file = mysql_query($sql_file) or die ("MESSAGE");
while ( $row_file = mysql_fetch_array($res_file) ) {
etc...
}
=================================================================
Merci pour l'aide,
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jogo
Sur fr.comp.applications.sgbd, max disait :
Je suis en mesure de récupérer les rangées distinctes selon les trois clés mais pas de compter les occurrences de chaque regroupement.
Mon code est le suivant:
================================================================== > $sql_file = "SELECT distinct field_132, field_142, field_138 FROM `table` WHERE (filename='".$impd_file."') ORDER BY field_132 ASC, field_142 ASC, field_138 ASC";
$res_file = mysql_query($sql_file) or die ("MESSAGE"); while ( $row_file = mysql_fetch_array($res_file) ) { etc... }
DISTINCT n'est pas SQL. Pour utiliser les fonctions d'aggrégation comme count() il faut "grouper" les resultats avec GROUP BY.
SELECT field_132, field_142, field_138, count(*) FROM table WHERE filename = ? GROUP BY field_132, field_142, field_138 ORDER BY field_132, field_142, field_138
-- GM> je sais pas si les filtres sur fr.* existent puisque j'ai vu passer GM> un msg sur fr.soc.histoire avec des photos de pièces gauloises... C'est parce qu'il ne faut pas de filtre pour les gauloises. -+- PV in <http://www.le-gnu.net> - Fume, c'est du binaire -+-
Sur fr.comp.applications.sgbd, max disait :
Je suis en mesure de récupérer les rangées distinctes selon les trois
clés mais pas de compter les occurrences de chaque regroupement.
Mon code est le suivant:
================================================================== > $sql_file = "SELECT distinct field_132, field_142, field_138 FROM
`table` WHERE (filename='".$impd_file."') ORDER BY field_132 ASC,
field_142 ASC, field_138 ASC";
$res_file = mysql_query($sql_file) or die ("MESSAGE");
while ( $row_file = mysql_fetch_array($res_file) ) {
etc...
}
DISTINCT n'est pas SQL. Pour utiliser les fonctions d'aggrégation comme
count() il faut "grouper" les resultats avec GROUP BY.
SELECT field_132, field_142, field_138, count(*)
FROM table
WHERE filename = ?
GROUP BY field_132, field_142, field_138
ORDER BY field_132, field_142, field_138
--
GM> je sais pas si les filtres sur fr.* existent puisque j'ai vu passer
GM> un msg sur fr.soc.histoire avec des photos de pièces gauloises...
C'est parce qu'il ne faut pas de filtre pour les gauloises.
-+- PV in <http://www.le-gnu.net> - Fume, c'est du binaire -+-
Je suis en mesure de récupérer les rangées distinctes selon les trois clés mais pas de compter les occurrences de chaque regroupement.
Mon code est le suivant:
================================================================== > $sql_file = "SELECT distinct field_132, field_142, field_138 FROM `table` WHERE (filename='".$impd_file."') ORDER BY field_132 ASC, field_142 ASC, field_138 ASC";
$res_file = mysql_query($sql_file) or die ("MESSAGE"); while ( $row_file = mysql_fetch_array($res_file) ) { etc... }
DISTINCT n'est pas SQL. Pour utiliser les fonctions d'aggrégation comme count() il faut "grouper" les resultats avec GROUP BY.
SELECT field_132, field_142, field_138, count(*) FROM table WHERE filename = ? GROUP BY field_132, field_142, field_138 ORDER BY field_132, field_142, field_138
-- GM> je sais pas si les filtres sur fr.* existent puisque j'ai vu passer GM> un msg sur fr.soc.histoire avec des photos de pièces gauloises... C'est parce qu'il ne faut pas de filtre pour les gauloises. -+- PV in <http://www.le-gnu.net> - Fume, c'est du binaire -+-
Eric Rossé
Le Fri, 25 Apr 2008 08:58:27 -0400, max écrivait:
Le résultat que je recherche est le suivant: - field_132 = 1, field_142 = A, field_138 = 7 (nombre = 3) - field_132 = 1, field_142 = A, field_138 = 8 (nombre = 2) - field_132 = 1, field_142 = A, field_138 = 6 (nombre = 2) - field_132 = 2, field_142 = B, field_138 = 8 (nombre = 4)
L'ordre sql à mettre en place est de type :
select count(*) nombre, field_132, field_142, field_138 from maTable group by field_132,field_142,field_138
Le Fri, 25 Apr 2008 08:58:27 -0400, max écrivait:
Le résultat que je recherche est le suivant:
- field_132 = 1, field_142 = A, field_138 = 7 (nombre = 3)
- field_132 = 1, field_142 = A, field_138 = 8 (nombre = 2)
- field_132 = 1, field_142 = A, field_138 = 6 (nombre = 2)
- field_132 = 2, field_142 = B, field_138 = 8 (nombre = 4)
L'ordre sql à mettre en place est de type :
select count(*) nombre, field_132, field_142, field_138
from maTable
group by field_132,field_142,field_138