Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Веб - Программирование > PHP

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 18.08.2009, 23:21   #1
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию My SQL Реккурсия

Здравствуйте!
ПОдскажите как написать реккурсивную процедур, которая будет выгребать из базы данных дерево. Можно ли из этой процедуры, сделать Select. Что бв не писать большой код в скрпте php
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама:


Старый 22.08.2009, 01:17   #2
alert2006
Неактивный пользователь
 
Пол:Мужской
Регистрация: 10.06.2008
Сообщений: 86
Репутация: 22
По умолчанию Re: My SQL Реккурсия

http://www.sql.ru/forum/actualthread.aspx?tid=313663
__________________
<?php if ($url == "nowa.cc") echo "It's a good choice"; exit(); ?>
alert2006 вне форума
 
Ответить с цитированием Вверх
Старый 22.08.2009, 01:33   #3
Wizard2007
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию Re: My SQL Реккурсия

К сожалению это не то. Я хочу классически организовать дерево. ID, ParentID и вытягивать реккурсивным запросом, ил процедурой все дерево. То что там предлагают не то что я хочу. Например в MS SQL 2005 уже есть рекурсивные запросы. Они реализуются черз виртуальные представления. В MySQL я пока не знаю как орагнизовать запрос или построить профудуру функцию, которая будет дерево выгребать из базы.
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Старый 22.08.2009, 04:22   #4
alert2006
Неактивный пользователь
 
Пол:Мужской
Регистрация: 10.06.2008
Сообщений: 86
Репутация: 22
По умолчанию Re: My SQL Реккурсия

Вот здесь информация о создании хранимых процедур в mysql http://www.cyberguru.ru/database/mys...rocedures.html .
А почему бы на php не решить данную задачу? Создание классического дерева занимает не более 10 строк кода.
__________________
<?php if ($url == "nowa.cc") echo "It's a good choice"; exit(); ?>
alert2006 вне форума
 
Ответить с цитированием Вверх
Старый 22.08.2009, 17:18   #5
Wizard2007
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию Re: My SQL Реккурсия

Я хочу за одно обращение к базе данных извлечь дерево и обработать потом данные на PHP. А не извлекать каждый уровень дерева из базы.
К стати можно ли хранимой процедурой вернуть набор данных.
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Старый 25.08.2009, 11:36   #6
Wizard2007
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию Re: My SQL Реккурсия

Код:
CREATE PROCEDURE `Recursive_procedure_new`(IN param1 INTEGER(11), IN StrIn teXT, OUT StrOut TEXT)
    DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
  Declare lStrIn, lStrOut Text;
  set lStrIn = CONCAT(STRIN,'!ABS');  
  set StrOut = lStrIn;  
  set @@max_sp_recursion_depth = 256;
  if (param1 <5 )Then
      Call `Recursive_procedure_new`(param1+1, lStrIn, lStrOut);
      set StrOut = lStrOut;
  end if; 
END;
Код:
CREATE PROCEDURE `Recursive_procedure_new`(IN param1 INTEGER(11), IN StrIn teXT, OUT StrOut TEXT)
    DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
  Declare lStrIn, lStrOut Text;
  set lStrIn = CONCAT(STRIN,'!ABS');  
  set StrOut = lStrIn;  
  set @@max_sp_recursion_depth = 256;
  if (param1 <5 )Then
      Call `Recursive_procedure_new`(param1+1, lStrIn, lStrOut);
      set StrOut = lStrOut;
  end if; 
END;
не могу получить результат выполнения реккурсии. Процедура и функция кпилируются но не выплняются.
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Старый 25.08.2009, 15:52   #7
aidyn
Неактивный пользователь
 
Регистрация: 25.08.2009
Сообщений: 1
Репутация: 0
По умолчанию Re: My SQL Реккурсия

тк надцать запросов это лишнее, я обычно выбираю одним запросом все из субд, а потом уже средствами пхп сортирую и строю дерево,а потом его закэшировать и вообще хорошо
aidyn вне форума
 
Ответить с цитированием Вверх
Старый 25.08.2009, 16:24   #8
Wizard2007
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию Re: My SQL Реккурсия

КАк ты все это отбираешь ? Все равно рекурсия должна присутствловать в запросе, если только у тебя дерево не храниться как вложенные множества, или есть дополнительная таблица, в котрой у тебя храняться расстояния от корня к каждому из узловю
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Старый 28.08.2009, 19:04   #9
Wizard2007
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию Re: My SQL Реккурсия

Процедура для отбора дерева.
Код:
CREATE PROCEDURE `up_SelectTree`(IN root BIGINT)
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
  declare Str text default '';
  set @Parent_ID = root;
  set Str = CONCAT(STR, IFNULL(@parent_id,''));
  set @Query = CONCAT(
    'Select * From ',
    '  `tbl_Tree` Where Parent_ID in (', @Parent_ID ,') order by id'
  );
  PREPARE select_sub_tree From @Query;
  EXECUTE select_sub_tree;
  DROP PREPARE select_sub_tree;
  set @HTML_TEXT = '';

  repeat
    set @Query = CONCAT(
      'Select GROUP_CONCAT(id) into @Parent_ID From ',
      '  `tbl_Tree` Where Parent_ID in (', @Parent_ID ,') order by id'
    );
    PREPARE select_sub_tree From @Query;
    EXECUTE select_sub_tree;
    DROP PREPARE select_sub_tree;

    if NOT @Parent_ID IS NULL Then
      set @Query = CONCAT(
        'Select * From ',
        '  `tbl_Tree` Where Parent_ID in (', @Parent_ID ,') order by id'
      );
      PREPARE select_sub_tree From @Query;
      EXECUTE select_sub_tree;
      DROP PREPARE select_sub_tree;
    end if;
    set Str = CONCAT(STR,',',  IFNULL(@Parent_ID,''));
  until @Parent_ID is null end REPEAT;
END;
Вызываю ее кодом из php, только выволиться на страницу только заголовок, и следубщий заним уровень дерева, а там их еще два. Почему не выводятся все остальные уровни?
Код:
$UserName = 'user';
  $Password = 'password';
  $DB = 'DB';
  $Server = 'localhost';
  $LinkToDB = mysqli_init(); 
  mysqli_real_connect($LinkToDB, $Server, $UserName, $Password) or die('Cannot connect to $Server, DB = $DB');
  $Query = 'Call up_SelectTree(52)'; 
  mysqli_select_db($LinkToDB,$DB);
  $res = mysqli_real_query($LinkToDB,$Query)or die (mysqli_error($LinkToDB));  
  if ($res)
  { 
   if ($result2 = mysqli_store_result($LinkToDB))
   {
     while ($row = mysqli_fetch_assoc($result2))
     {
       foreach ($row as $key => $rValue)
       	{
       	  Echo "key = $key value = $rValue<BR>";
       	}
     }
   }
  }
  mysqli_close($LinkToDB);
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Старый 20.09.2009, 23:25   #10
wice22
Неактивный пользователь
 
Регистрация: 20.09.2009
Сообщений: 4
Репутация: 0
По умолчанию Re: My SQL Реккурсия

кодом из php ?
wice22 вне форума
 
Ответить с цитированием Вверх
Старый 20.09.2009, 23:40   #11
Wizard2007
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию Re: My SQL Реккурсия

Да кодом из PHP
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 09:11. Часовой пояс GMT +3.


Copyright ©2004 - 2026 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.05759 секунды с 10 запросами