Avatar billede jangravgaard Nybegynder
14. maj 2003 - 13:29 Der er 1 kommentar og
1 løsning

rekursivt kald som returnerer sql

Hej
Jeg har gang i et debatforum, som er bygget op på denne måde.
databasen er postgre:
CREATE TABLE "px_topics" (
  "topic_id" int4 DEFAULT
  "parent_id" int4,
  "root_id" int4,
  "name" varchar(255),
  "description" text,
  "modify_dt" timestamptz,
  "author" varchar(255),
  "author_host" varchar(255),
  "email" varchar(255),
  "svarbesked" bool,
  "create_dt" timestamptz,
);

Essensen i tabellen er at root_id angiver om indlægget ingen parent har, i så fald, bliver indlægget listet øverst i træstrukturen. Noget i stil med dette :

ID:82 Ceres tur nu på onsdag???
      ID:83 Re: Ceres tur nu på onsdag???
            ID:84 Re: Re: Ceres tur nu på onsdag???

Jeg har følgende sql/php:

$rootsql = "SELECT parent_id AS p_id, \"name\", topic_id AS t_id, root_id AS r_id FROM \"px_topics\" WHERE parent_id ='0' ORDER BY \"create_dt\" DESC";


    function children($p_id, $r_id, $conn){
        if(is_numeric($p_id) AND is_numeric($r_id)){
            $sql = "SELECT * FROM \"px_topics\" WHERE root_id = '$r_id' AND topic_id <> '$r_id'";

            $childresult = pg_exec($conn, $sql);
            if(!$childresult){
                break;
            }else{
                for ($q = 0; $q < pg_numrows($childresult); $q++ ) {
                    $post = pg_fetch_array($childresult, $q);
                    $topic_id = $post["topic_id"];
                    $parent_id = $post["parent_id"];
                    $root_id = $post["root_id"];
                    $name = $post["name"];

                    echo "  <tr><td>\n  <table border='0' cellpadding='0' cellspacing='0' width='100%'>\n";
                    echo "    <tr><td class='forumindent'>ID:".$topic_id." ".$name."<br></td></tr>\n";
                    echo "  </table>\n </td>\n</tr>";
                }
               
            }
        }else{
            break;
        }
    }


spørgsmålet er hvor jeg skal kalde funktionen "children" igen i funktionen for at skidtet virker.....
Avatar billede jakoba Nybegynder
14. maj 2003 - 13:56 #1
function children($p_id, $r_id, $conn){
        if(is_numeric($p_id) AND is_numeric($r_id)){
            $sql = "SELECT * FROM \"px_topics\" WHERE root_id = '$r_id' AND topic_id <> '$r_id'";

            $childresult = pg_exec($conn, $sql);
            if(!$childresult){
                break;
            }else{
                for ($q = 0; $q < pg_numrows($childresult); $q++ ) {
                    $post = pg_fetch_array($childresult, $q);
                    $topic_id = $post["topic_id"];
                    $parent_id = $post["parent_id"];
                    $root_id = $post["root_id"];
                    $name = $post["name"];

                    echo "  <tr><td>\n  <table border='0' cellpadding='0' cellspacing='0' width='100%'>\n";
                    echo "    <tr><td class='forumindent'>ID:".$topic_id." ".$name."<br></td></tr>\n";
                    echo "  </table>\n </td>\n</tr>";

                children( $post['denne_posts_id'], $r_id, $conn );  //  < - - - HER

                }
             
            }
        }else{
            break;
        }
    }


men i dit eksempel rykker du 'børnene' lægnere og længere ind. det gør denne funktion ikke.

mvh JakobA
Avatar billede jangravgaard Nybegynder
16. maj 2003 - 14:08 #2
det duede jo bare, beklager den lange svartid :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester