Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récuperer le nombre de rangées pour chaque DISTINCT dans une table

2 réponses
Avatar
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,

Max.

2 réponses

Avatar
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&gt; - Fume, c'est du binaire -+-
Avatar
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