structure d'une base de donnés sql pour un forum et fonctions innovant

structure d'une base de donnés sql pour un forum et fonctions innovant - PHP - Programmation

Marsh Posté le 03-11-2002 à 18:52:57    

voila tout et dans le titre....
j'ai besoin de programmer un forum....(et pas dans repiquer un )
je commence a etre bon en php/sql/javascript/html ....
jee viens de creer une librairie pour simplifier a mort les requetes sql (histoire de me simplifier la programmation du forum)
 
QUESTIONS :
1/quelles sont les fonctions essentielles d'un forum ?(hors lire et posté ..lol)
2/quelles fonctions manquent aux forums ?(par ex hardware.fr exemple meme du forum impec)
 
merci

Reply

Marsh Posté le 03-11-2002 à 18:52:57   

Reply

Marsh Posté le 03-11-2002 à 19:52:52    

Ici, la seule fonction qui pourait manquer dans certain cas, c'est une vue hiérarchique de la discution ou une récapitulation hiérarchique de la discution avec un affichage d'un seul message à la fois.
Quand une discution part dans 4-5 directions à la fois, c'est parfois limite dur de s'y retrouver. ;)

Reply

Marsh Posté le 03-11-2002 à 21:39:01    

omega2 a écrit a écrit :

Ici, la seule fonction qui pourait manquer dans certain cas, c'est une vue hiérarchique de la discution ou une récapitulation hiérarchique de la discution avec un affichage d'un seul message à la fois.
Quand une discution part dans 4-5 directions à la fois, c'est parfois limite dur de s'y retrouver. ;)




 
Que veux tu dire??  
 
Tu veux dire quand l'un repond a l'autre? Puis un autre a un autre etc .. ???
 
C'est vrai que c'est interressant !  
 
Aller au boulot mrwisema:  :lol:  
 
P.S.: Moi aussi j'ai commencé la creation d'un script de forum, pas plutard qu'hier , je suis encore au stade de la generation des forum et sous forum, si vous voulez voir ce que ca donne,  
 
http://www.decorations.be/gbb/?action=ShowMainForum
 
Bref je v retenir ta remarque omega ;)  
 
a+
 
EDIT: faite pas attention aux sections, c'est a titre de test :p c du nimporte nawak
a+
EDIT2: pt1 movais lien :)


Message édité par Schtroumpheur le 03-11-2002 à 21:42:21
Reply

Marsh Posté le 03-11-2002 à 22:35:24    

schtroumpheur a écrit a écrit :

 
 
Que veux tu dire??  
 
Tu veux dire quand l'un repond a l'autre? Puis un autre a un autre etc .. ???
 
C'est vrai que c'est interressant !  
 
Aller au boulot mrwisema:  :lol:  
 
P.S.: Moi aussi j'ai commencé la creation d'un script de forum, pas plutard qu'hier , je suis encore au stade de la generation des forum et sous forum, si vous voulez voir ce que ca donne,  
 
http://www.decorations.be/gbb/?action=ShowMainForum
 
Bref je v retenir ta remarque omega ;)  
 
a+
 
EDIT: faite pas attention aux sections, c'est a titre de test :p c du nimporte nawak
a+
EDIT2: pt1 movais lien :)



Je veux dire, t'as une discution. T'as un gas qui réponds à la première partie du message. Un autre répond à la seconde partie du message. (et boom, 2 directions de discutions)
t'en as un troisième qui a une vision diférente du pproblème, ca te fait une troisième direction de discution possible.
Si t'as que 7-8 messages en tout, ca va, mais quand t'en as 40-50 voire plus et que sur un fil de discution t'as une réponse qui arrive plus de 10 messages après le message auquel il répond alors ca devient parfois dificile de pas ce bourer dans le sens de la réponse. (bon, ok, les citation aivdent à la compréhension)

Reply

Marsh Posté le 04-11-2002 à 00:04:59    

omega2 a écrit a écrit :

Je veux dire, t'as une discution. T'as un gas qui réponds à la première partie du message. Un autre répond à la seconde partie du message. (et boom, 2 directions de discutions)
t'en as un troisième qui a une vision diférente du pproblème, ca te fait une troisième direction de discution possible.
Si t'as que 7-8 messages en tout, ca va, mais quand t'en as 40-50 voire plus et que sur un fil de discution t'as une réponse qui arrive plus de 10 messages après le message auquel il répond alors ca devient parfois dificile de pas ce bourer dans le sens de la réponse. (bon, ok, les citation aivdent à la compréhension)




 
Je viens de finir un script PHP de forum
Si ça vous intéresse je pourrais l'envoyer
La partie la plus intéressante est justement l'arborescence

Reply

Marsh Posté le 04-11-2002 à 00:12:33    

omega2 a écrit a écrit :

Je veux dire, t'as une discution. T'as un gas qui réponds à la première partie du message. Un autre répond à la seconde partie du message. (et boom, 2 directions de discutions)
t'en as un troisième qui a une vision diférente du pproblème, ca te fait une troisième direction de discution possible.
Si t'as que 7-8 messages en tout, ca va, mais quand t'en as 40-50 voire plus et que sur un fil de discution t'as une réponse qui arrive plus de 10 messages après le message auquel il répond alors ca devient parfois dificile de pas ce bourer dans le sens de la réponse. (bon, ok, les citation aivdent à la compréhension)




 
Oui ok, mais comment faire pour que le script sache a quoi ta repondu, et si il doit faire une autre branche dans l'arborescance??  
 
A.I. ?  :D  
 

Reply

Marsh Posté le 04-11-2002 à 08:45:25    

justement c'est quand tu as cliqué comme ci-dessus sur le bouton "répondre à" et qu tu fais une citation du message.
"truc à écrit : + message".
Au lieu d'avoir ça tu aurais une arbo.


---------------
...oups kernel error...
Reply

Marsh Posté le 04-11-2002 à 14:21:37    

ethernal a écrit a écrit :

justement c'est quand tu as cliqué comme ci-dessus sur le bouton "répondre à" et qu tu fais une citation du message.
"truc à écrit : + message".
Au lieu d'avoir ça tu aurais une arbo.



Tu peux même avoir les deux.
Une arbo de stocké + "truc à écrit : + message". au niveau du nouveau message.
C'est ce que j'ai fait pour mon forum (j'y ai une vue comme celle d'ici et une message/message + l'arborescence)

Reply

Marsh Posté le 04-11-2002 à 15:41:38    

ethernal a écrit a écrit :

justement c'est quand tu as cliqué comme ci-dessus sur le bouton "répondre à" et qu tu fais une citation du message.
"truc à écrit : + message".
Au lieu d'avoir ça tu aurais une arbo.




 
Ha oui je vois,
 
ben c'est pas une mauvaise idee, entk j'essaierai de faire cela sur le forum que j'ai commencé :)
Ca va etre un algo de ouf mais bon on va essayer !
 
Ca sent la fonction recursive tout ca ! mummm  
 
A+

Reply

Marsh Posté le 04-11-2002 à 15:55:07    

schtroumpheur a écrit a écrit :

 
 
Ha oui je vois,
 
ben c'est pas une mauvaise idee, entk j'essaierai de faire cela sur le forum que j'ai commencé :)
Ca va etre un algo de ouf mais bon on va essayer !
 
Ca sent la fonction recursive tout ca ! mummm  
 
A+




:lol:
oui, mais faut surtout pas mettre de query dans la fonction récursive.
 
à la limite tu peux faire : extraction de la bd -> tableau -> fonction récursive(tableau,id)


---------------
...oups kernel error...
Reply

Marsh Posté le 04-11-2002 à 15:55:07   

Reply

Marsh Posté le 04-11-2002 à 16:59:16    

ethernal a écrit a écrit :

 
:lol:
oui, mais faut surtout pas mettre de query dans la fonction récursive.
 
à la limite tu peux faire : extraction de la bd -> tableau -> fonction récursive(tableau,id)




 
pourquoi il faut pas faire ca ?
 
y a d'autres méthodes que celle que t'as dite ?
 
merci


---------------
oui oui
Reply

Marsh Posté le 04-11-2002 à 17:22:00    

schtroumpheur a écrit a écrit :

 
 
Ha oui je vois,
 
ben c'est pas une mauvaise idee, entk j'essaierai de faire cela sur le forum que j'ai commencé :)
Ca va etre un algo de ouf mais bon on va essayer !
 
Ca sent la fonction recursive tout ca ! mummm  
 
A+



ben non, une colone pour l'ordre cronologique (ordre d'insertion)
une colone qui sert à conaitre l'ordre dans l'arborescence
une colone pour avoir le numéro du message auquel tu réponds
et une colone pour dire que c'est une réponse de tel niveau.
 
Voilà ce qu'il faut pour gérer les deux à la fois sans problème (bon, il y a même redondance des infos mais ca permet de faire un controle pendant que tu testes et ca permet d'éviter les systèmes récursifs. ;) )

Reply

Marsh Posté le 04-11-2002 à 17:34:56    

pourquoi que c'est pas bien les trucs récursifs ?


---------------
oui oui
Reply

Marsh Posté le 04-11-2002 à 17:39:29    

art_dupond a écrit a écrit :

pourquoi que c'est pas bien les trucs récursifs ?
 



Ca ralonge les temps d'exécutions et en plus si t'as une boucle, tu te retrouves à dépasser le temps limite d'exécution et tu méttras un bon moment à découvrir ce qui décone.

Reply

Marsh Posté le 04-11-2002 à 18:18:40    

hum....pas mauvaise cette idée...perso je rajouterai juste un champ dans la tables des reponse pour indiqué a qui il repond dans le post...
 
pourrais meme mettre une fonction qui permet de couper un thread en deux, non ?

Reply

Marsh Posté le 04-11-2002 à 18:46:58    

mrwiseman a écrit a écrit :

hum....pas mauvaise cette idée...perso je rajouterai juste un champ dans la tables des reponse pour indiqué a qui il repond dans le post...
 
pourrais meme mettre une fonction qui permet de couper un thread en deux, non ?



Pas mal ces deux idées là. :)
En plus, c'est pas très compliqué à faire.
 
A première vue du moins. ;)


Message édité par omega2 le 04-11-2002 à 18:47:42
Reply

Marsh Posté le 04-11-2002 à 21:46:08    

en fait je fais un site qui sera architecturer autour d'un forum (concept inside), j'aimerai que chaque forumeur puisse promosai au Webmaster (genre moi) un post qu'il a apprecier en news ou en dossier (dans le cas d'un long post).non ?
 :bounce:

Reply

Marsh Posté le 04-11-2002 à 22:08:16    

omega2 a écrit a écrit :

ben non, une colone pour l'ordre cronologique (ordre d'insertion)
une colone qui sert à conaitre l'ordre dans l'arborescence
une colone pour avoir le numéro du message auquel tu réponds
et une colone pour dire que c'est une réponse de tel niveau.
 
Voilà ce qu'il faut pour gérer les deux à la fois sans problème (bon, il y a même redondance des infos mais ca permet de faire un controle pendant que tu testes et ca permet d'éviter les systèmes récursifs. ;) )




 
J'ai toujours cru que les truc recursif, c'etait la meilleure solution dans le cas d'une arborescance dont on ne connais pas le nombre de branches ! M'enfin ton idee est pas mauvaise non plus :)
 
au fait, comment vous voyer l'affichage de cette arborescence???
Comme des post normeaux? dans un tableau html ? Ou l'arborescance dessinnées un peu comme dans l'explorer de windows ... ?
 
Quel systeme serait le plus pratique, et rapide pour l'utilisateur a votre avis?  
 
C'est a reflechir aussi !  
 
a+

Reply

Marsh Posté le 04-11-2002 à 22:09:13    

mrwiseman a écrit a écrit :

en fait je fais un site qui sera architecturer autour d'un forum (concept inside), j'aimerai que chaque forumeur puisse promosai au Webmaster (genre moi) un post qu'il a apprecier en news ou en dossier (dans le cas d'un long post).non ?
 :bounce:  




Ton projet m'interresse, hesite pas a montrer ce que tu fais !
:)

Reply

Marsh Posté le 05-11-2002 à 00:16:12    


omega2 a écrit a écrit :

ben non, une colone pour l'ordre cronologique (ordre d'insertion)
une colone qui sert à conaitre l'ordre dans l'arborescence
une colone pour avoir le numéro du message auquel tu réponds
et une colone pour dire que c'est une réponse de tel niveau.
 
Voilà ce qu'il faut pour gérer les deux à la fois sans problème (bon, il y a même redondance des infos mais ca permet de faire un controle pendant que tu testes et ca permet d'éviter les systèmes récursifs. ;) )




 
l'algorithme d'arborescence que j'utilise est basé sur la récursivité et en fait je code la réponse 1 au message 1 par exemple par 1r1 , la 2eme réponse à cette dernière par 1r1r2 etc...
Est-ce ce que la comlexité est acceptable ?
Et étant donné que j'emploie directement le query dans le while,
pourquoi C pas bon?
 

Reply

Marsh Posté le 05-11-2002 à 00:21:32    

KillerOnEarth a écrit a écrit :

 
 
 
l'algorithme d'arborescence que j'utilise est basé sur la récursivité et en fait je code la réponse 1 au message 1 par exemple par 1r1 , la 2eme réponse à cette dernière par 1r1r2 etc...
Est-ce ce que la comlexité est acceptable ?
Et étant donné que j'emploie directement le query dans le while,
pourquoi C pas bon?
 
 




 
Ben a mon avis c'est plus lent car tu vois la quantité de requete multipliée par le nomnbre de post, imagine un sujet qui a mille post.  
 
mille requetes ?  :heink:  
 
Je pense que une requete qui selectionne tout les post concerné et les met dans un Array est preferable niveau performance, et tu traites le tableau comme il se doit par recursivité :)
 
Cela dis tu peux nous montrer ce que tu as fait deja?
 
a+
 
 

Reply

Marsh Posté le 05-11-2002 à 11:06:42    

KillerOnEarth a écrit a écrit :

 
 
 
l'algorithme d'arborescence que j'utilise est basé sur la récursivité et en fait je code la réponse 1 au message 1 par exemple par 1r1 , la 2eme réponse à cette dernière par 1r1r2 etc...
Est-ce ce que la comlexité est acceptable ?
Et étant donné que j'emploie directement le query dans le while,
pourquoi C pas bon?
 
 



Ben là, de  manière théorique ca pourait être bon mais je vois pas du tout a quel niveau t'as un système récursif dans ta base de donnée ou dans ton traitement.
par contre pour trier les réponses ça doit être compliqué par ce que tant que t'en as que 9 ca va (r1 à r9) mais si tu dépasse tu te retrouve avec un r10 et là si tu fais un tri par ordre alphabétique tu te retrouves avec les réponses 10 et 11 entre la réponse 1 et la réponse 2 et pour faire un tri numérique, t'es obligé de le faire par programme ce qui va te bouffer de la mémoire (obligé de stocké à la fois ce qui est retourné par la requête et le tableau contenant l'ensemble des réponses trié comme il faut) et tu perds du temps machine (obligé de faire de nombreuses opérations (découpage de l'identification de réponse, recherche de la position d'insertion, décalage des réponses situé après la position d'insertion , ...) afin d'obtenir le bon tri.
Bref, ca me semble pas être la solution idéale.

Reply

Marsh Posté le 05-11-2002 à 11:10:26    

schtroumpheur a écrit a écrit :

 
 
J'ai toujours cru que les truc recursif, c'etait la meilleure solution dans le cas d'une arborescance dont on ne connais pas le nombre de branches ! M'enfin ton idee est pas mauvaise non plus :)
 
au fait, comment vous voyer l'affichage de cette arborescence???
Comme des post normeaux? dans un tableau html ? Ou l'arborescance dessinnées un peu comme dans l'explorer de windows ... ?
 
Quel systeme serait le plus pratique, et rapide pour l'utilisateur a votre avis?  
 
C'est a reflechir aussi !  
 
a+



Je t'aurais bien montré ce que ca donne sur mon site, mais j'ai vidé tout les messages d etests pour le passer en utilisation normale et du coup, l'arborescence la plus compliqué n'a pour le moment aucune réponse.
Par contre chez mi, je doit encore avoir une copie de la base avec tout les tests et donc quand j'aurais le temps je sauvegarderais une copie du résultat écran que je métrais en ligne pour te montrer ce que ca donne sur mon site. ;)
Mais là, je peux pas le faire desuite.
 
 
PS : Tu peux déjà aller voir comment le site www.ubix.org à traité le problème de l'affichage de l'arborescence.
Il y a deux systèmes : 1 qui affiche les messages un par un dans la colone centrale et l'arborescence dans la colone de droite
1 système qui affiche tout les messages de la discution avec  un décalage en fonction du niveau de réponse.


Message édité par omega2 le 05-11-2002 à 11:15:21
Reply

Marsh Posté le 05-11-2002 à 11:27:45    

omega2 a écrit a écrit :

Je t'aurais bien montré ce que ca donne sur mon site, mais j'ai vidé tout les messages d etests pour le passer en utilisation normale et du coup, l'arborescence la plus compliqué n'a pour le moment aucune réponse.
Par contre chez mi, je doit encore avoir une copie de la base avec tout les tests et donc quand j'aurais le temps je sauvegarderais une copie du résultat écran que je métrais en ligne pour te montrer ce que ca donne sur mon site. ;)
Mais là, je peux pas le faire desuite.
 
 
PS : Tu peux déjà aller voir comment le site www.ubix.org à traité le problème de l'affichage de l'arborescence.
Il y a deux systèmes : 1 qui affiche les messages un par un dans la colone centrale et l'arborescence dans la colone de droite
1 système qui affiche tout les messages de la discution avec  un décalage en fonction du niveau de réponse.




 
D'apres ce que j'ai vu l'idee de l'arborescance a droite c'est super bien pensé ! Par contre je trouve que l'affichage des post est a optimisé au milieu , je sais pas ce que t'en pense !
a+

Reply

Marsh Posté le 05-11-2002 à 12:46:37    

schtroumpheur a écrit a écrit :

 
 
D'apres ce que j'ai vu l'idee de l'arborescance a droite c'est super bien pensé ! Par contre je trouve que l'affichage des post est a optimisé au milieu , je sais pas ce que t'en pense !
a+



Si tu parle de l'affichage des posts quand tu demandes toute la discution d'un coup alors oui, c'est pas encore parfais (surtout dans les plus grandes discutions) mais faut dire, c'est pas facile à régler de manière parfaites quelles que soient les discutions.
Si c'est quand tu demande qu'une réponse à la fois, moi, je le trouve bien comme ça. Faut dire a force de le visiter, j'y suis habitué.

Reply

Marsh Posté le 05-11-2002 à 13:17:21    

Ouais c'est ca qui me gene un peu, fo chaque fois clicker pour voir la suivante ! Mais a mon avis c une question de gout, je sais pas, le mieux serait de permettre a l'utilisateur de paramettrer tout ca ;)  
 
a+

Reply

Marsh Posté le 05-11-2002 à 13:40:04    

schtroumpheur a écrit a écrit :

Ouais c'est ca qui me gene un peu, fo chaque fois clicker pour voir la suivante ! Mais a mon avis c une question de gout, je sais pas, le mieux serait de permettre a l'utilisateur de paramettrer tout ca ;)  
 
a+



Ben tu peux toujours utiliser la vue d'ensemble de la discution (le liens ce trouve dans la colone d edroite, je me rapelel plus le libéllé du lien)

Reply

Marsh Posté le 05-11-2002 à 21:09:46    

omega2 a écrit a écrit :

Ben là, de  manière théorique ca pourait être bon mais je vois pas du tout a quel niveau t'as un système récursif dans ta base de donnée ou dans ton traitement.
...




 
Merci pour les réponses.
Voilà, je mets le code correspondant à mon script
(Tout au long du script je suppose que j'ai un nombre de réponse maximal égal à 9 (juste un début de script quoi ;)
 
 
<?php require("connect3.php" );
 mysql_pconnect(SERVER, NOM, PASSE);
 mysql_select_db("forum" );
   
 
 $y=NULL;
 
 function affiche($X,$i) {
 
          global $y;
   $y=$y.$X.$i;
 
   while ($obj=mysql_fetch_object(mysql_query("select                                             id,titre,date,sender from base where id='$y'" ))) {
     
     for ($j=1;$j<=(strlen($y)/2);$j++) {
       echo "    ";
     }
     
     echo "  <a href=\"reply.php?num=$y&suj=$obj->titre\" style=\"text-decoration: ".
 "none\"> * $obj->titre </a> <i><font size=-1>  ".
 "$obj->sender   $obj->date </font></i><br>";
 
     affiche('r',1);
     $y = substr($y , 0, -3);
 
     $i++;
     $y=$y.$i;
   }
   
       }
 
       $y=NULL;
       affiche (NULL,1);
 
?>
 
 
 
Voilà, je suis vraiment nul sur la mise en forme de code et en plus là j'ai un peu honte de pas mettre de commentaires.
 
encore merci !

Reply

Marsh Posté le 05-11-2002 à 21:10:32    

zut alors elle est vraiment nulle la mise en page !

Reply

Marsh Posté le 05-11-2002 à 21:43:23    

T'as raison, là, c'est vraiment qu'un tout début de script vu qu'au mieux t'affiches qu'une branche de la discution ( affiche('r',1), le 1 est en dur.
A côté de ça, tu pars dans une boucle infinis (    while ($obj=mysql_fetch_object(mysql_query("select                                             id,titre,date,sender from base where id='$y'" ))) ) Comme la requête est exécuté à chaque passage du while, tu te retrouve à avoir toujours $obj=mysql_fetch_object égal à vrai.
Enfin dernière erreur : le $j en global.
Sic, voilà donc le meilleur moyen pour qu'en tout une seule branche de la discution avant de tomber sur des réponses inéxistantes.
 
Pour le dernier point, voilà un exemple :
1
1r1
1r1r1
1r2
1r3
1r3r1
1r4
 
Tu vas avoir les valeur suivantes dans ton $j : (les valeurs de $j mises entre parenthèses corespondent à ceux que t'aurais une fois les deux premiers problèmes réglé)
 
1      ( 1 )
1r1    ( 1r1 )
1r1r1  ( 1r1r1 )
1r2    ( 1r1r1r2 ) (à partir de là les réponses existent plus)
1r3    ( 1r1r1r2r3 )
1r3r1  ( 1r1r1r2r3r1 )
1r4    ( 1r1r1r2r3r1r4 )
 
 
Le mieux, c'est de déclaré ta fonction comme étant de type  function affiche($j,$X,$i) et sans mettre la variable $j en global. Ca t'oblige à passer la variable $j en paramêtre mais au moins ca buguera pas.
 
bon, comme tu le disait, c'est jsute un début de programme et c'est donc normal qu'il y ai des bugs. ;)

Reply

Marsh Posté le 06-11-2002 à 00:07:55    

wahhh.....j'en suis venu a la meme conclusion .
mais je verai ca comme ca :
 
[table0][table1][table2]....
(post1) (rep1-1)
        (rep1-2)
(postn) (repn-1)
        (repn-2)(repn-2-1)
                (repn-2-2)
        (repn-3)
 
voila avec des facteur limitant pour le nombre de rep (5-10 ?)
et pas plus de 6 niveau de rep...suivant organisation du forum
 
dans ce cas il remonte d'un cran dans la hierarchie
et pourquoi s'emmerder avec une clé de type var...
je m'explique on cree une table de niveau n....et elle compotera n champ de type int pour y stocher une partie de son adresse 'hierarchique'...
bien maintenant chaque categorie du forum est en faite un post mais sans limitation de reponse .
les news et les dossiers sont aussi des categorie de news...les commentaire sont des reponses....et ses reponses peuvent etre muté en forum en cas de conversation interessante....
tout ca de la meme facon qu'un ensemble de reponse monte d'un cran hierarchique pour devenir un thread a part...
 
[table index]
niveau0 bigint autoincrement primary key
thread txt
post txt
iduser int
date datetime unique key
 
[table 1]
niveau0 index//adresse post originie
niveau1 index
thread txt
post txt
iduser int
date datetime unique key
 
 
etc....vous voyer ?
et puis je pensais mettre un mode reumé qui premet de cacher les reponses de niveau inferieur (conversation a part dans un post)...et voir meme masqué les post et ne laisser que les titres des reponses.
 
qu'en pensez-vous ?
 
 
des que j'ai un truc fontionnel je vous le montre..
 

Reply

Marsh Posté le 06-11-2002 à 00:21:52    

mrwiseman a écrit a écrit :

wahhh.....j'en suis venu a la meme conclusion .
mais je verai ca comme ca :
 
[table0][table1][table2]....
(post1) (rep1-1)
        (rep1-2)
(postn) (repn-1)
        (repn-2)(repn-2-1)
                (repn-2-2)
        (repn-3)
 
voila avec des ....
 
 




 
En fait comme j'utilise $substr( $y, 0, -3) il n'ya aucun problème : dès que la suite de fonctions 'affiche' qui se sont appelées aboutit à un cul-de-sac fait qu'on revient là où il faut et le $i++ se charge de passer à la valeur suivante.D'où aussi l'interêt d'avoir $y en global
Désolé en fait j'ai pas mis cette ligne là bien en évidence.
a+et merci pour les replys
mon problème reste toukours comment éviter toutes ces queries en gardant ma méthode si possible

Reply

Marsh Posté le 06-11-2002 à 00:28:38    

Et puis j'apprécie l'idée du tableau en cas de débordement
il va donc juste falloir mettre juste après une réponse 9 un lien "more" vers la suite de la sous arborescence.
Je pense aussi que je pourrais modifier le code pour avoir un test sur l'ordre de grandeur de $i et donc ne plus tronquer 3 chars de $y mais plutôt un nombre adapté à $i (C  déjà beaucoup plus compliqué  :??:  
bref ya des trucs à faire la dessus
a+

Reply

Marsh Posté le 06-11-2002 à 01:35:30    

Copie du message laissé en MP à KillerOnEarth. je le copie là pour avoir les éfléxions des autres au cas où. ;)
 
Ben si t'as une séries de réponses avec pour codes :
1
1r1
1r1r1
1r1r1r1
1r1r1r1r1
1r1r2
 
tu vas charger ta variable $j :
1
1r1
1r1r1
1r1r1r1
1r1r1r1r1
 
puis commencer à la décharger en enlevant 3 caractères à la fois :
1r1r1r1 => 1r1r (premier retour)
1r1r => 1 (second retour)
 
puis tu pars dans l'autre branche
1r2
 
Bref, ca a pas l'air de marcher comme il faut car a chaque fois tu élimine un caractèrende trop (sauf erreur de ma part)
J'ai pas fait de test pour vérifier mes dires. ;)  
 
Tu dis que ca amrche et ca me parait bizare a moins qu'il y ai un caractère terminal dont je n'ai pas conaissance ou que la fonction n'enlève que n caractère moins 1. (il me semble avoir déjà vu ça dans les créations de certains quand on fesait nos études à l'IUT.)
 
Bon, pour éviter les query, il faudrait modifier le test afin de charger toutes les réponses d'une disccution en une fois puis charger des enregistrement de manière récursif pour obtenir un ensemble équivalent à celui des requêtes.
 
Par exemple pour l'exemple au dessus il serait possible de faire le chargement comme suit.
$tab["mes"][1] <= 1
$tab["rep"][1]["mes][1] <= 1r1
$tab["rep"][1]["rep"][1]["mes][1] <= 1r1r1
$tab["rep"][1]["rep"][1]["rep"][1]["mes][1] <= 1r1r1r1
$tab["rep"][1]["rep"][1]["mes][2] <= 1r1r2
 
Ensuite, faut parcourir le tableau (c'est faisable de manière récursive) pour relire els infos qui du coup sont directement trié par le numéro même si t'as plus de 9 réponses à un message donnée (seule complication, la séparation de l'indentifiant du message qui du coup n'est pas faisable à l'aide d'un nombre de caractère fixe).
 
Je suis pas sur d'être hyper clair mais là je suis fatigué alors je vais me coucher.
 
Si tu as besoin de plus de détail demandes. ;)

Reply

Marsh Posté le 06-11-2002 à 02:36:12    

je suis le sujet de loin depuis le début (et à mon avis je suis à la masse pcq j'ai toujours rien compris à votre manière de le résoudre...)
 
ça me semble assez simple en restant dans le classique (mais ça l'est peut-être pas -> voir remarque ci-dessus :D)
 

Code :
  1. //dans la table, le parent=0 si il est au top-level, sinon parent=id du pere
  2. //id parent message
  3. //1    0     msg1
  4. //2    1     rep1
  5. //3    1     rep2
  6. //...
  7. $query= "select id, parent, message from message order by id"
  8. //execquery etc...
  9. while ( $row= mysql_fetch_array() ){
  10.   $list_messages[$parent][$id]= $row;
  11. }
  12. function Affich_Msg( &$list_messages, $idpere){
  13.  
  14.   while(list($id, $msg)= each($list_messages[$idpere]){
  15.     echo $msg['message'];
  16.     Affich_Msg($list_messages, $id);
  17.   }
  18. }
  19. //appel de la fonction
  20. Affich_Msg($list_messages, 0);


je sais pas si mon algo est bon, mais ça doit être qqch du style.


Message édité par ethernal le 06-11-2002 à 02:38:28

---------------
...oups kernel error...
Reply

Marsh Posté le 06-11-2002 à 10:06:20    

omega2 a écrit a écrit :

Copie du message laissé en MP à KillerOnEarth. je le copie là pour avoir les éfléxions des autres au cas où. ;)
 
Ben si t'as une séries de réponses avec pour codes :
1
1r1
1r1r1
1r1r1r1
1r1r1r1r1
1r1r2
 
...




 
justification du 3 :
on suppose qu'on est allé jusqu'à 1r1r1r1r1  
il y a un nouvel appel de la fonction affiche  
cette fonction ne trouve plus de message en réponse
alors on commence à quitter la suite de fonctions affiche imbriquées : on enlève 1r1 puis r1r et on incrémente $i (j'ai squté qqe étapes) et on affecte ---> $y=$y.$i <---
et on se retrouve avec 1r2  
la fonction 'affiche' correspondante teste maintenant avec 1r2 ce qui permet la continuation du prog.
ça marche assez bien
 
 

Reply

Marsh Posté le 06-11-2002 à 10:41:06    

KillerOnEarth a écrit a écrit :

 
 
justification du 3 :
on suppose qu'on est allé jusqu'à 1r1r1r1r1  
il y a un nouvel appel de la fonction affiche  
cette fonction ne trouve plus de message en réponse
alors on commence à quitter la suite de fonctions affiche imbriquées : on enlève 1r1 puis r1r et on incrémente $i (j'ai squté qqe étapes) et on affecte ---> $y=$y.$i <---
et on se retrouve avec 1r2  
la fonction 'affiche' correspondante teste maintenant avec 1r2 ce qui permet la continuation du prog.
ça marche assez bien
 
 



Ca y est j'ai compris pourquoi ca marche.
En fait, t'enlèves 1r1 puis tu rajoutes 2.
Comme le message existe pas, tu descent d'un cran et du coup, t'enlève 1r2 et tu rajoutes 2 (la seconde réponse du niveau en dessous).
Ok, maintenant, je comprends.
C'est ça le problème avec les fonctions récursive quand on les a pas créé nous mêmes, on peut ne pas avoir vu une instruction hyper importante.
Je comprends mieux l'utilité du "affiche (NULL,1); ", par contre, je comprends pas l'utilité du "$j= NULL;" qui le précède.
Il y aurait pas un risque de perdre des sous branches là?

Reply

Marsh Posté le 06-11-2002 à 11:37:03    

si vous voulez travailler sans fonction récursive, voici la "Gestion d'arbres par représentation intervallaire"
très rapide en consultation, mais lourd en update.
 
http://sqlpro.developpez.com/Tree/SQL_tree.html


---------------
...oups kernel error...
Reply

Marsh Posté le 06-11-2002 à 11:42:55    

omega2 a écrit a écrit :

Ca y est j'ai compris pourquoi ca marche.
Je comprends mieux l'utilité du "affiche (NULL,1); ", par contre, je comprends pas l'utilité du "$j= NULL;" qui le précède.
Il y aurait pas un risque de perdre des sous branches là?




 
Je ne crois pas.Mais j'ai simplement mis ceci pour bien initialiser la variable à NULL avant de commencer.
est-ce que NULL est la valeur par defaut affectée à $y ?

Reply

Marsh Posté le 06-11-2002 à 12:06:24    

KillerOnEarth a écrit a écrit :

 
 
Je ne crois pas.Mais j'ai simplement mis ceci pour bien initialiser la variable à NULL avant de commencer.
est-ce que NULL est la valeur par defaut affectée à $y ?
 



JE sais pas, il y a les variables non affecté et els vairables affecté.
Je suis pas certain qu'il y ai une valeur par défaut mais tu peux toujorus forcé à "" pour être sur. ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed