Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос из книги практика создания веб сайтов
 
 автор: В   (16.06.2006 в 22:00)   письмо автору
 
 

Файл art.php стр.289 “Практика разработки веб сайтов” там статьи выводятся по запросу
SELECT * FROM paragraphes WHERE id_article=$id_articles AND pos=$pos

И параграфы статьи выводятся в нужном порядке.

По принципу у первого элемента статьи pos=0… Поле pos следующего элемента равно первичному ключу id_paragraph, точно также определяется поле pos для второго по порядку элемента статьи.

Это понятно, все работает хорошо…

Но почему они выводятся именно в нужном порядке… я что-то не понял…
И где при выводе учитывается эта связь между id_paragraph и pos… ни каких условий для этого я не заметил… Вывод либо я чего не заметил либо чего не знаю...

В общем… все работает как надо и выводит в нужном порядке, но почему я не понял… объясните пожалуйста…

   
 
 автор: valenok   (16.06.2006 в 22:18)   письмо автору
 
   для: В   (16.06.2006 в 22:00)
 

Просто они в базу занесены по порядку.
А php и вытаскивает по порядку - строчка за строчкой

   
 
 автор: cheops   (17.06.2006 в 00:45)   письмо автору
 
   для: В   (16.06.2006 в 22:00)
 

>Просто они в базу занесены по порядку.
Нет, дело в том, что функция реализует рекурсивный спуск, мы извлекаем параграф - выводим его, а далее смотрим для какого параграфа текущий параграф является родителем и в конце фунции выводим параграф-потомок, за счёт повторного вызова функции putarticle() и так до тех пор, пока в статье не закончатся параграфы.

   
 
 автор: valenok   (17.06.2006 в 08:35)   письмо автору
 
   для: cheops   (17.06.2006 в 00:45)
 

Ну может быть. У меня не совсем есть эта книга.
Если есть желающие - можете подарить...

   
 
 автор: В   (17.06.2006 в 16:33)   письмо автору
6.3 Кб
 
   для: valenok   (17.06.2006 в 08:35)
 

Уточняю они могут быть не поп порядку записаны и иметь
например следующий порядок вывода (отображен на прилагаемом рисунке)
и значения id_paragraph и pos как на рисунке. Те в базу они добавлены не по порядку и id_paragraph и pos у них из-за этого соответственные

Из за того что новый параграф может быть добавлен в середину статьи.

>>функция реализует рекурсивный спуск, мы извлекаем параграф - выводим его, а далее >>смотрим для какого параграфа текущий параграф является родителем и в конце фунции >>выводим параграф-потомок, за счёт повторного вызова функции putarticle() и так до тех пор, >>пока в статье не закончатся параграфы.

это понятно...слова понятны... но не понимаю почему... как она реализут рекурсивный спуск?

вначале функция вызывается так

putarticle(0,$_GET['id_article']);

потом идет сама функция и ей единственный SQL запрос
SELECT * FROM paragraphes WHERE id_article=$id_articles AND pos=$pos

потом она вызывается рекурсивно
putarticle($paragraphes['id_paragraph'],$id_article);
Где кстати определяется что она вызвана рекурсивно?

И благодаря чему определяется какой параграф родитель какой потомок и выводит именно в этом порядке...

Ни в SQL запросе ни в самой функции я явной такой связи не заметил... и в этом вопрос... ПОЧЕМУ она работает так?

   
 
 автор: cheops   (17.06.2006 в 16:56)   письмо автору
 
   для: В   (17.06.2006 в 16:33)
 

Посмотрите рисунок на 294 странице. Дело в том, что поле pos потомка, хранить id_paragraph родителя, поэтому передавая фукнции putarticle() в качестве первого аргумента первичный ключ параграфа мы автоматически переходим к потомку. Функция называется рекурсивной, потому что она вызывает саму себя до тех пор, пока в статье не закончатся параграфы.

   
 
 автор: В   (17.06.2006 в 17:54)   письмо автору
 
   для: cheops   (17.06.2006 в 16:56)
 

>Посмотрите рисунок на 294 странице. Дело в том, что поле pos
>потомка, хранить id_paragraph родителя, поэтому передавая
>фукнции putarticle() в качестве первого аргумента первичный
>ключ параграфа мы автоматически переходим к потомку. Функция
>называется рекурсивной, потому что она вызывает саму себя до
>тех пор, пока в статье не закончатся параграфы.

Я понимаю что поле pos хранить id_paragraph родителя

>поэтому передавая
>фукнции putarticle() в качестве первого аргумента первичный
>ключ параграфа мы автоматически переходим к потомку

Но еще не понял почему мы автоматически переходим к потомку...

или понял... Сначала ведь вызывается функция
putarticle($pos,$id_article)

А в конце putarticle($paragraphes['id_paragraph'],$id_article)

А потом опять putarticle($pos,$id_article)

А после этого опять
putarticle($paragraphes['id_paragraph'],$id_article)

и так пока параграфы не кончатся!!!

Так?

   
 
 автор: cheops   (17.06.2006 в 21:54)   письмо автору
 
   для: В   (17.06.2006 в 17:54)
 

Да, совершенно верно функция вызывает саму себя спускаясь вниз по статье, до тех пор пока не кончатся параграфы в статье. При каждом вызове в качестве аргумента передаётся первичный ключ следующего параграфа.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования