Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour, j'ai plusieurs soucis pour compter, trier et ranger...
J'ai donc deux tables
table1 table2
id1 code1 categorie id2 code2 groupe
1 001 a 1 001 1
2 002 b 2 002 1
3 003 c 3 003 1
4 004 d 4 004 2
5 005 e 5 005 2
6 006 b 6 006 2
7 007 a 7 007 3
8 008 a 8 008 3
9 009 c 9 009 3je voudrais arriver à :
groupe categorie nombre
1 a 1
2 a 0
3 a 2
ce qui lie mes tables c'est le code
alors pour cette requete, je veux :
compter le nombre de 'categorie' dans chaque 'groupe'
grouper par 'groupe'
trier par l'id2'
et surtout afficher les zéro, des 'groupe'
n'ayant meme pas de 'categorie'
je veux savoir combien il y a de
categorie dans le groupe et s'il n'y en a pas afficher "0"
voici ce que j'ai fais pour l'instant
SELECT table2.groupe,
COUNT(table1.categorie) AS nombre
FROM table2, table1
WHERE table1.code=table2.code2 AND categorie = 'a'
GROUP BY table2.groupe
ORDER BY table2.id2 ASC
si vous pouviez me donner un coup de main
et s'il manque quelque chose, demandé moi
les CREATE TABLE
CREATE TABLE IF NOT EXISTS `table1` (
`id1` int(11) NOT NULL auto_increment,
`nom` text NOT NULL,
`prenom` text NOT NULL,
`categorie` text NOT NULL,
`code1` text NOT NULL,
PRIMARY KEY (`id1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
CREATE TABLE IF NOT EXISTS `table2` (
`id2` int(11) NOT NULL auto_increment,
`groupe` text NOT NULL,
`code2` text NOT NULL,
PRIMARY KEY (`id2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
et les INSERT INTO
INSERT INTO `table1` (`id1`,`nom`, `prenom`, `categorie`, `code1`) VALUES
(1, 'durant', 'andre', 'a', '001',),
(2, 'dupont', 'Jean', 'b', '002'),
(3, 'martin', 'Elodie', 'c', '003'),
(4, 'blanc', 'Dominique', 'd', '004'),
(5, 'rouge', 'Monique', 'e', '005'),
(6, 'vert', 'Francois', 'b', '006'),
(7, 'bleu', 'Fabien', 'a', '007'),
(8, 'noir', 'Jean', 'a', '008'),
(9, 'blanc', 'Marie', 'c', '009'),
INSERT INTO `table2` (`id2`, `groupe`, `code2`) VALUES
(1, '1', '001'),
(2, '1', '002'),
(3, '1', '003'),
(4, '2', '004'),
(5, '2', '005'),
(6, '2', '006'),
(7, '3', '007'),
(8, '3', '008'),
(9, '3', '009'),
Hors ligne
Voici la réponse pour information
SELECT groupe, (SELECT COUNT(categorie) FROM table1 WHERE categorie='a' AND id1=id2) AS cat
FROM table2 t2
GROUP BY groupe
Hors ligne
Saluton,
Surement pas !
Il faut faire une jointure externe (LEFT OUTER JOIN) entre les deux tables sur les colonnes code1 et code2.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
en fait je joins bien les code1 et code2
et j'arrive bien au résultat que je souhaitais !
Hors ligne
ah
ah bah dans ce cas j'attends une proposition
pour comparer
Hors ligne
Ce n'est pas une question de propreté, c'est avant tout une question de performances et de respect de la norme SQL 92, qui a donc déjà 18 ans.
Les sous-requêtes ne constituent pas le point fort de MySQL, il vaut donc toujours mieux essayer de les remplacer par leur équivalent en jointures.
Parvenir au résultat escompté est un critère nécessaire mais insuffisant.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
alors là je suis tout à fait d'accord avec toi
mais j'avoue que je n'ai surement pas le niveau requis
et malheureusement, c'est une requete qui me convient
mais si tu me proposes une requete à la norme et performante
je serais content de la tester et de pouvoir en apprendre un peu plus
Hors ligne
Si j'ai bien compris ta problématique je te propose ceci
qui fait un produit cartésien entre table2 et l'ensemble des catégories puis compte, par jointure avec t1, leur fréquence d'apparition dans chaque groupe.
Je n'ai pas testé...
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
ok merci par contre c'est au niveau de l'affichage que ça coince maintenant !
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\test\sitnum5.php on line 68
<?php
while ($row_0102 = mysql_fetch_assoc($requete_0102)) {
echo '<tr><td>',$row_0102['cat'],'</td></tr>';
} ?>
Hors ligne
Je t'ai dit que je n'avais pas testé, et tu exploites directement le résultat sans le tester dans PhpMyAdmin, par exemple.
Si la requête plante ou ne retourne pas de résultat, $requete_0102 n'est pas une ressource utilisable par mysql_fetch_assoc()
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
exact il y a déjà une erreur dans PhpMyAdmin
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT OUTER JOIN table1 t1 ON code1=code2 AND t3.' at line 6
Hors ligne
En fait, c'est un peu plus compliqué
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Merci ça fonctionne bien mais cela me donne toutes les categorie
j'ai essayé de placer un WHERE categorie='a' mais erreur !
Dernière modification par athome (01-07-2010 16:03:01)
Hors ligne
... pour cette requete, je veux :
compter le nombre de 'categorie' dans chaque 'groupe'
grouper par 'groupe'
trier par l'id2'et surtout afficher les zéro, des 'groupe'
n'ayant meme pas de 'categorie'
je veux savoir combien il y a de
categorie dans le groupe et s'il n'y en a pas afficher "0"
Tel était, me semble-t'il, le cahier des charges initial.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
effectivement, mais j'avais aussi indiqué un résultat ressemblant à ceci :
groupe categorie nombre
1 a 1
2 a 0
3 a 2
et le "trier par l'id2" je l'ai fait avec un ORDER BY
je pensais faire de meme avec un WHERE t3.categorie = 'a' mais soi
j'ai une erreur, soit il ne me sort plus que les groupe ayant cette catégorie !
Hors ligne
Ta question démontre que tu n'essayes même pas de comprendre la logique de cette requête
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
ok, merci de ta remarque et de ta requête qui fonctionne très bien
Hors ligne
Pages :: 1