requête récursive
Posté : 01 sept. 2008, 13:14
(mysql 5, wamp, php5)
Bonjour,
j'essaie d'obtenir une liste d'éléments dans une table, et la liste des enfants associés dans la même table. Chaque élément enfant contient l'identifiant du parent dans un champ. Les éléments qui n'ont pas de parent ont le champ "parent" à 0.
La requête que j'ai actuellement :
C'est dans la table "compteurs" que se trouve la notion de "parent". Chaque compteur peut avoir un ou plusieurs enfants, mais un seul parent.
J'ai besoin, dans cette requête, de renvoyer :
La liste des compteurs principaux (pas d'enfants) -> ok
La liste des compteurs enfants (récursivité)
Les mois ou ont été effectués un prélèvement sur ces compteurs -> ok
La somme des prélèvements par mois pour une année -> ok
Il me manque, finalement, ce qui me semble le plus compliqué : la récursivité.
Pour information :
compteurs(id, numero, numero_serie, marque, diametre, annee_fab, alimentation, archive, site_id, parent)
Si vous pouvez m'aider, je vous en remercie grandement, car j'essaie d'éviter de passer par plusieurs requêtes afin d'alléger l'application.
EDIT
Voici ce que j'obtiens actuellement :
Il me manque, entre compteur et total, la liste des sous compteurs (compteurs ayant pour parent le compteur dans la colonne un cran à gauche).
Merci à vous.
Bonjour,
j'essaie d'obtenir une liste d'éléments dans une table, et la liste des enfants associés dans la même table. Chaque élément enfant contient l'identifiant du parent dans un champ. Les éléments qui n'ont pas de parent ont le champ "parent" à 0.
La requête que j'ai actuellement :
Code : Tout sélectionner
SELECT MONTH(R.date_releve) AS num_month, C.numero, SUM(R.total)
FROM releves R, compteurs C, sites S
WHERE R.compteur_id = C.numero
AND C.site_id = S.id
AND YEAR(R.date_releve) = 2007
AND C.parent = 0
AND S.id = 4
GROUP BY num_month, C.numero
ORDER BY C.numero, num_monthJ'ai besoin, dans cette requête, de renvoyer :
La liste des compteurs principaux (pas d'enfants) -> ok
La liste des compteurs enfants (récursivité)
Les mois ou ont été effectués un prélèvement sur ces compteurs -> ok
La somme des prélèvements par mois pour une année -> ok
Il me manque, finalement, ce qui me semble le plus compliqué : la récursivité.
Pour information :
compteurs(id, numero, numero_serie, marque, diametre, annee_fab, alimentation, archive, site_id, parent)
Code : Tout sélectionner
CREATE TABLE `compteurs` (
`id` int(11) NOT NULL auto_increment,
`numero` varchar(20) NOT NULL,
`numero_serie` varchar(20) NOT NULL,
`marque` varchar(25) default NULL,
`diametre` int(10) default NULL,
`annee_fab` year(4) default NULL,
`alimentation` varchar(255) default NULL,
`archive` tinyint(1) default NULL,
`site_id` int(11) NOT NULL,
`parent` int(11) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `numero` (`numero`,`numero_serie`)
)EDIT
Voici ce que j'obtiens actuellement :
Code : Tout sélectionner
mois compteur total
1 96240778 1
2 96240778 1
3 96240778 1
4 96240778 1
5 96240778 1
6 96240778 3
7 96240778 15
9 96240778 1
7 D21 Bo 1.1 1
Merci à vous.