1. PHP / Говнокод #2927

    +159.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    <?php 
    include( "dbopen.php" ); 
    
    function ShowTree($ParentID, $lvl) { 
    
    global $link; 
    global $lvl; 
    $lvl++; 
    
    $sSQL="SELECT id,title,pid FROM catalogue WHERE pid=".$ParentID." ORDER BY title";
    $result=mysql_query($sSQL, $link);
    
    if (mysql_num_rows($result) > 0) {
    echo("<UL>\n");
    while ( $row = mysql_fetch_array($result) ) {
    $ID1 = $row["id"];
    echo("<LI>\n");
    echo("<A HREF=\""."?ID=".$ID1."\">".$row["title"]."</A>"."  \n");
    ShowTree($ID1, $lvl); 
    $lvl--;
    }
    echo("</UL>\n");
    }
    
    }
    
    ShowTree(0, 0); 
    
    mysql_close($link); 
    
    ?>

    Построение дерева с запросом в цикле:)))

    http://www.codenet.ru/webmast/php/tree.php

    Запостил: ar4ibal, 05 Апреля 2010

    Комментарии (19) RSS

    • вот блин! можно же одним запросом
      Ответить
      • Ого, а может покажите этот запрос?
        Ответить
        • SELECT `id`, `pid`, `title` FROM `catalogue`

          как ни странно
          и потом рекурсивно пробежаться по всем элементам, построив дерево

          http://phpclub.ru/faq/Tree/AlPrintAll?v=1crk вот тут подробнее и с кодом
          Ответить
          • а если в дереве 100500 элементов? ты их все в память пихать предлагаешь?
            Ответить
            • думаешь это будет хуже, чем делать 100500 запросов на страницу?
              да и при while ( $row = mysql_fetch_array($result) ) { абсолютно все записи не будут грузиться в память
              упс, затупил. один фиг дерево надо строить в память
              Ответить
              • А если убивать ветки дерева по мере вывода?
                Ответить
                • Ты сначала вытягиваешь всё дерево, а потом строишь. Это по принципам MVC отделяя логикы от представления, т.е. тебе придётся сначала все прочитать а потом выводить.

                  ЗЫ Paginator-ы рулят.
                  Ответить
                  • Принципы MVC в данном случае только мешают.

                    P.S. Не очень понятно, как разбивать иерархическое дерево на страницы. Если разбивать ветки, то будет потеряна связть.
                    Ответить
                    • Например дерево не разрывать, есть на странице больше например 100 комментариев, следующую ветку уже переносить на следующую страницу

                      ar4ibal
                      Ответить
                      • Да. Это как сокращенные заголовки новостей.

                        "Предизент компании ссы..."
                        "Президент компании ссылается..."
                        Ответить
                        • Ну в 90% случаев такие комментарии необрезают по страничкам, как здесь например, но в крайне тяжелых случаях лучше это сделать.

                          ar4ibal
                          Ответить
                          • Желательно всегда так делать. Но из-за 95% мы имеет кучу лулзов.

                            Впрочем, как всегда.
                            Ответить
                • давайте беречь лес :'(
                  Ответить
            • Если в дереве столько элементов, надо сразу себе вены порезать.
              Ответить
          • Блин, что-то я протупил, конечно так и надо делать : )
            Ответить
    • Почему никто не оценил эти прелесные кавычки:
      \""."?ID=".$ID1."\">"
      Ответить
      • Обычные кавычки.
        Ответить
      • Да, архитектура MVC в гробу переворачивается со скоростью вентилятора...
        Ответить
      • А одинарные использовать не позволяет религия?
        Ответить

    Добавить комментарий