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

Форум PHP

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

 

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

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

тема: Рекурсивный перебор вариантов
 
 автор: Владимир55   (06.07.2012 в 17:07)   письмо автору
 
 

Для получения данных из базы используется вот такой запрос:

<?php

    $query 
"SET @STR_ID = 141"/* Начальные уловия */
    
$result mysql_query($query);

    
$query "SELECT
    STR_ID, STR_DES_TEXT, DESCENDANTS и далее длинное тело запроса"
;
    
$result mysql_query($query);

    
//Обработка и вывод результатов SQL-запроса
    
while ($row mysql_fetch_array($resultMYSQL_ASSOC)){

        
$STR_ID $row["STR_ID"];
        
$STR_DES_TEXT $row["STR_DES_TEXT"];
        
$DESCENDANTS $row["DESCENDANTS"];
    }

?>


Здесь параметр DESCENDANTS может принимать только два значения: либо отсутвовать, либо единица.

Нужно составить код, работающий следующим образом: если DESCENDANTS существует, то параметр STR_ID подставляется взамен начальных условий и запрос выполняется еще раз.

И так до тех пор, пока не будут извлечены все данные.

Соответственно, результат каждого запроса нужно выводить в браузер.

(И как-то защитить от бесконечного повторения. Сто запросов достаточно, но тогда нужно сообщение о том, что исчерпан лимит).

Как все это можно сделать?

  Ответить  
 
 автор: cheops   (08.07.2012 в 13:45)   письмо автору
 
   для: Владимир55   (06.07.2012 в 17:07)
 

Можно начать отталкиваться от какого-то такого скрипта
<?php 
  
function sql_print($str_id$count)
  {
    if(
$count >= 100) exit("Превышено ограничение на рекурсивные вызовы (100)");

    
$query "SET @STR_ID = $str_id";
    
$result mysql_query($query); 

    
$query "SELECT 
                STR_ID, 
                STR_DES_TEXT, 
                DESCENDANTS и далее длинное тело запроса"

    
$result mysql_query($query); 

    
//Обработка и вывод результатов SQL-запроса 
    
while ($row mysql_fetch_array($resultMYSQL_ASSOC))
    { 
      
// Выводим содержимое результирующей таблицы
      
print_r($row);
      if(!empty(
$row["DESCENDANTS"]))
      {
        
sql_print($row["STR_ID"], $count++);
      }
    } 
  }
?>

  Ответить  
Rambler's Top100
вверх

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