PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 18-06-2011 20:49:12

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Requète sur une cascade de relation

Bonjour,

Je dispose d'éléments de base « groupe » :

CREATE TABLE IF NOT EXISTS `groupes` (
  `id_groupe` int(11) NOT NULL AUTO_INCREMENT,
  `groupe` varchar(250) NOT NULL,
  `date_creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_groupe`)
)

Je créé une « structure d'arbre » en associant en cascade un groupe avec un autre (au passage, je viens de me rendre compte qu'en fait je n'ai pas besoin de la table relationnelle vue qu'un groupe enfant ne peut avoir qu'un seul groupe parent : je ferais mieux de créer un champ « id_groupe_parent » dans la table « groupes » ?) :

CREATE TABLE IF NOT EXISTS `groupes_groupes` (
  `id_groupe_groupe` int(11) NOT NULL AUTO_INCREMENT,
  `id_groupe_parent` int(11) NOT NULL,
  `id_groupe_enfant` int(11) NOT NULL,
  `date_creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_groupe_groupe`)
)

Je voudrais, partant d'un des groupes, connaître tous les groupes qu'il contient. Ce que je ne vois pas, c'est comment faire intervenir la notion de niveau. Je peux passer au suivant facilement, mais comment je fais pour passer au suivant suivant ?

Les groupes contient d'autres éléments. Je veux faire une somme sur tous les éléments contenus :

Groupe 1 :
- Groupe 1 :
-- Elément 1 : 10
-- Elémént 2 : 20
- Groupe 2 :
-- Groupe 1 :
--- Elément 1 : 30
--- Elémént 2 : 30
-- Groupe 2 :
--- Elément 1 : 10

Total : 100 !

Merci !

Dernière modification par moijhd (18-06-2011 21:54:48)

Hors ligne

#2 18-06-2011 21:18:44

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Requète sur une cascade de relation

inspires toi de  çà  wink

a++

Hors ligne

#3 18-06-2011 21:40:54

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Requète sur une cascade de relation

Je suis capable de faire ce que je veux avec des requètes multiples et en faisant intervenir du PHP, mais je voudrais le faire qu'en SQL.

J'ai aussi lu le lien qui était donné, mais j'ai du mal à voir comment ça m'aide...

Ou alors, c'est beaucoup plus lourd que ce que je pensais puisqu'il faut que je change de strucutres pour calculer les NFM_BG et les NFM_BD ?

Dernière modification par moijhd (18-06-2011 21:46:52)

Hors ligne

#4 18-06-2011 21:47:10

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Requète sur une cascade de relation

alors, lis le bien, parce que c'est exactement ce qu'il te faut wink
a++

Hors ligne

#5 18-06-2011 21:47:30

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Requète sur une cascade de relation

Bonsoir,

Il est vrai que le lien de pierrot contient tout ce que tu veux concernant la gestion d'arbres, y compris les arbres intervallaires et leur modélisation en SGBDR.
Par contre il est vrai aussi que si tu souhaites une requete qui te compte le nombre total de groupes que contient chaque groupe_groupe, cela ne t'aidera pas. Est-ce bien cela que tu cherches à faire?

Cordialement,

Jc


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#6 18-06-2011 21:58:08

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Requète sur une cascade de relation

Ce que je retiens du document, c'est que je dois changer de strucuture ou lui faire subir une transformation pour qu'elle rentre dans le cadre d'application.

Ce que je cherche à faire par rapport à mon petit arbre : 100 = ( ( 30 + 30 ) + ( 10 ) ) + ( 10 +20 ) ).

Hors ligne

#7 18-06-2011 22:12:02

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Requète sur une cascade de relation

Il te faut faire alors un truc du genre:



SELECT t1.id_groupe_groupe, (t2.g1+t2.g2) as total_sousgroupes FROM groupes_groupes as t1 LEFT JOIN
(SELECT id_groupe_groupe, SUM(id_groupe_parent) as g1, SUM(id_groupe_enfant) as g2 FROM groupes_groupes GROUP BY id_groupe_groupe, id_groupe_parent,id_groupe_enfant) as t2 ON t1.id_groupe_groupe=t2.id_groupe_groupe GROUP BY t1.id_groupe_groupe ORDER BY t1.id_groupe_groupe
 

J'ai pas test (fait à l'arrache) mais l'idée est là.

Jc

EDIT: oups petite erreur de visu après relecture, essaye plutot ceci


SELECT t1.id_groupe_groupe, (t2.g1+t2.g2) as total_sousgroupes FROM groupes_groupes as t1 LEFT JOIN
(SELECT id_groupe_groupe, COUNT(id_groupe_parent) as g1, COUNT(id_groupe_enfant) as g2 FROM groupes_groupes GROUP BY id_groupe_groupe, id_groupe_parent,id_groupe_enfant) as t2 ON t1.id_groupe_groupe=t2.id_groupe_groupe GROUP BY t1.id_groupe_groupe ORDER BY t1.id_groupe_groupe
 

te reste ensuite à prendre en compte le nombre de groupes groupe_groupe.

Dernière modification par Jc (18-06-2011 22:36:02)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#8 18-06-2011 22:30:01

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Requète sur une cascade de relation

Je vais réfléchir sur cette requète.

Hors ligne

#9 19-06-2011 13:26:51

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Requète sur une cascade de relation

Au risque de vous faire crier, j'ai choisi de faire plusieurs requètes en passant par un boucle en PHP...

Hors ligne

#10 19-06-2011 16:52:53

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Requète sur une cascade de relation

Ouhla, ca ne me fait pas crier, mais pour apprendre il faut trouver la solution. Si on fait quelque chose que l'on sait déjà faire, on n'apprends rien. Donner une solution qui fonctionne aide à comprendre, mais vous ne saurez pas résoudre un problème similaire pour autant tant que vous ne l'aurez pas fait par vous-même.

"C'est vous qui voyez" wink


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums