Page 1 sur 1

Aide requête

Posté : 11 févr. 2010, 22:40
par VaN
Soit la table suivante :
CREATE TABLE IF NOT EXISTS `cnje_modules` (
  `module_id` int(11) NOT NULL AUTO_INCREMENT,
  `module_parent_id` int(11) DEFAULT NULL,
  `module_famille_id` tinyint(4) NOT NULL,
  `module_name` varchar(100) NOT NULL,
  `module_folder_name` varchar(100) NOT NULL,
  `module_page_name` varchar(100) NOT NULL,
  `module_statut` tinyint(1) NOT NULL,
  PRIMARY KEY (`module_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ;

--
-- Contenu de la table `cnje_modules`
--

INSERT INTO `cnje_modules` (`module_id`, `module_parent_id`, `module_famille_id`, `module_name`, `module_folder_name`, `module_page_name`, `module_statut`) VALUES
(1, NULL, 1, 'Informations', 'informations', 'index.php', 1),
(2, NULL, 1, 'Membres', 'membres', '', 1),
(3, 2, 1, 'Consulter la liste des membres actuels', 'membres-actuels', 'index.php', 1),
(4, 2, 1, 'Consulter la liste des anciens membres', 'anciens-membres', 'index.php', 1),
(5, 2, 1, 'Ajouter un membre', 'ajouter-membre', 'index.php', 1),
(6, NULL, 1, 'Evénements', 'evenements', '', 1),
(7, 6, 1, 'Congrès régionaux', 'congres-regionaux', 'index.php', 1),
(8, 6, 1, 'Congrès nationaux', 'congres-nationaux', 'index.php', 1),
(9, 6, 1, 'Club Junior-Entreprises', 'club-junior-entreprises', 'index.php', 1),
(10, 6, 1, 'Assemblées Générales des Présidents', 'assemblees-generales-des-presidents', 'index.php', 1),
(11, NULL, 1, 'Audits', 'audits', 'index.php', 1),
(12, NULL, 1, 'Visites Qualité', 'visites-qualite', 'index.php', 1),
(13, NULL, 1, 'Labellisations', 'labellisations', 'index.php', 1),
(14, NULL, 1, 'AS/AF/PPU', 'as-af-ppu', 'index.php', 1),
(15, NULL, 1, 'Rapports d''activité', 'rapports-d-activite', 'index.php', 1),
(16, NULL, 1, 'Liasses fiscales / cotisations', 'liasses-fiscales', 'index.php', 1),
(17, NULL, 1, 'Prix d''Excellence / Labels', 'prix-d-excellence-labels', '', 1),
(18, 17, 1, 'Prix d''Excellence', 'prix-d-excellence', 'index.php', 1),
(19, 17, 1, 'Labels', 'Labels', 'index.php', 1);
J'aimerai faire une requête, qui me renverrai un tableau (contenant seulement les modules dont le champ module_parent_id est NULL), chaque ligne stockant les champs module_id, module_name, module_folder_name, moduler_page_name, ainsi qu'une autre variable, me permettant, pour chaque ligne du tableau, de savoir si le module en question possède des enfants. Je pensait à un COUNT du nombre de modules dont le module_parent_id est égal au module_id du module en cours.

Mais je n'arrive pas à mettre en place une telle requête.

Ma requête actuelle :
"SELECT PARENTS.module_id, PARENTS.module_name, PARENTS.module_folder_name, PARENTS.module_page_name
			FROM ".$tables["modules"]." AS PARENTS
			WHERE PARENTS.module_parent_id IS NULL AND PARENTS.module_statut = 1"
Il me manque donc le dernier champ, permettant de savoir si un module possède des enfants. Un peu d'aide serait la bienvenue.

Re: Aide requête

Posté : 11 févr. 2010, 23:09
par stealth35
tu le JOIN lui meme
SELECT c1.module_id, c1.module_name, c1.module_folder_name, c1.module_page_name, COUNT(c2.module_id) num_children 
FROM cnje_modules c1, cnje_modules c2 
WHERE c1.module_id = c2.module_parent_id 
GROUP BY c1.module_id

Re: Aide requête

Posté : 11 févr. 2010, 23:13
par VaN
Nickel. j'ai fait une petite modif, histoire récupérer également les modules qui n'ont pas d'enfants :
"SELECT c1.module_id, c1.module_name, c1.module_folder_name, c1.module_page_name, COUNT(c2.module_id) AS num_children
			FROM ".$tables["modules"]." c1
			LEFT JOIN ".$tables["modules"]." c2 ON c1.module_id = c2.module_parent_id 
			WHERE c1.module_parent_id IS NULL AND c1.module_statut = 1 GROUP BY c1.module_id"

Re: Aide requête

Posté : 12 févr. 2010, 10:29
par zeus
Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP !", "Aidez-moi", "J'ai un problème", "Ça marche pas",...
n'apportent rien à la compréhension de ta demande.

Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.

Tu peux corriger ton titre en éditant ton premier message.

Merci de prendre le temps de lire les règlements.