OVH Cloud OVH Cloud

[MySQL] Aide pour une requête

4 réponses
Avatar
p_geni...
Bonjour,

je bloque un peu pour créer une requête : mon problème est le suivant :

J'ai une table messages

messageId | parentId
-------------+--------------
1 | 0
2 | 1
3 | 1 2
4 | 1 2 3
5 | 1 2
9 | 0
12 | 9
13 | 9 12
etc...

parentId = 0 pour les message sans parents (ou les pères)
parentId contient les parents du message.

Je veux en une seule requête chercher les messages sans parents
c.à.d avec un parentId=0 et puis pour chaque message dont parentId = 0
compter le nombre de fils (c.à.d le nombre de messages dont parentId
contient le numéro du père)


une réponse du genre
messageId | nbr_fils
-------------+--------
1 | 4
9 | 2

J'espère être clair

Merci de votre aide.
(Je sais je ne suis pas fort en SQL.)

Pierre.



-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/

4 réponses

Avatar
p_geni...
Hugues wrote:

parentid est une chaine de caractère avec la concaténation des
différents pères ?



oui, c'est bien une chaine de caratères formée par les messageId
des parents séparés par un espace et là est mon problème


messageid est un number ?


Oui il s'agit bien d'un number


La solution est triviale si tu utilisait une table pour stocker les



J'ai fait

select messageId from messages where parentId=0;

Puis pour chaque messageId trouvé il faut faire un truc du genre

select count(messageId) where parentId LIKE ...
El là je bloque de plus je veux utiliser une seule requête.


Pierre.





-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/
Avatar
JustMe
Pierre Génieys a formulé la demande :
Hugues wrote:

parentid est une chaine de caractère avec la concaténation des
différents pères ?



oui, c'est bien une chaine de caratères formée par les messageId
des parents séparés par un espace et là est mon problème


messageid est un number ?


Oui il s'agit bien d'un number


La solution est triviale si tu utilisait une table pour stocker les



J'ai fait

select messageId from messages where parentId=0;

Puis pour chaque messageId trouvé il faut faire un truc du genre

select count(messageId) where parentId LIKE ...
El là je bloque de plus je veux utiliser une seule requête.



On va supposer que tu as

message | pere
---------+------
1 | 0
2 | 1
3 | 1
3 | 2
4 | 1
4 | 2
4 | 3
5 | 1
5 | 2
9 | 0
12 | 9
13 | 9
13 | 12
(13 rows)

En fait le but est d'obtenir les fils de chaque message :

select t1.message, t1.pere, t2.message from toto t1, toto t2 where
t1.message = t2.pere;

message | pere | message
---------+------+---------
1 | 0 | 2
1 | 0 | 3
1 | 0 | 4
1 | 0 | 5
2 | 1 | 3
2 | 1 | 4
2 | 1 | 5
3 | 1 | 4
3 | 2 | 4
9 | 0 | 12
9 | 0 | 13
12 | 9 | 13

tu ne t'interesse qu'a ceux sans pere :

select t1.message, t2.message as fils from toto t1, toto t2 where
t1.message = t2.pere and t1.pere = 0;

message | fils
---------+------
1 | 2
1 | 3
1 | 4
1 | 5
9 | 12
9 | 13

Tu ne veux que le compte :

select t1.message, count(t2.message) as fils from toto t1, toto t2
where t1.message = t2.pere and t1.pere = 0 group by t1.message;

message | fils
---------+------
1 | 4
9 | 2

Voili...
Avatar
helios
Helios devrait vite rappliquer avec son pick :-)


tu connais la solution applique la alors
Avatar
helios
"JustMe" a écrit dans le message de
news:

Voili...





maintenant tu peut retourner jouer a oracle sur ta gameboy