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

Форум PHP

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

 

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

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

тема: подъем и спуск, меню, алгоритм
 
 автор: Амбер   (01.08.2010 в 22:35)   письмо автору
 
 

Всем привет!

Интересуюсь тем, как лучше справляться с нижеприведенной задачей

допустим есть таблица
table
id name id_parent
1 'земленные' 0
2 'кортошка' 1
3 'морковка' 1
4 'морские' 0
5 'рыбы' 4

В общем обычный каталог. Так вот какой аглоритм можно придумать по оптимальней для следующей задачи. Приходит к нам id = 3. выводятся 3,2,1,4. Приходит 5, выводятся 5,4,1

Алгоритм, думаю следующий. рекурсией с одним запросом внутри рекурсии дергаем базу, заносим в массив, и из массива затем выводим. Так вот это получиться очень много обращений к бд. А возможно ли одним запросом к mysql не зная глубины вложенности. и как это делается обычно?

  Ответить  
 
 автор: neadekvat   (01.08.2010 в 22:43)   письмо автору
 
   для: Амбер   (01.08.2010 в 22:35)
 

Что-то я по названным id не уловил - по какому принципу то достаются записи?

  Ответить  
 
 автор: Амбер   (01.08.2010 в 22:55)   письмо автору
 
   для: neadekvat   (01.08.2010 в 22:43)
 

id int(11) DEFAULT NULL - это автоинкремент.

по id_parent - происходит связывание, Родитель - дети

  Ответить  
 
 автор: neadekvat   (01.08.2010 в 22:57)   письмо автору
 
   для: Амбер   (01.08.2010 в 22:55)
 

Да что вы. А посмотрите на свой пример данных.
Приходит 5, у него родитель 4, а у 4 родителя уже нет.

  Ответить  
 
 автор: Амбер   (01.08.2010 в 22:59)   письмо автору
 
   для: neadekvat   (01.08.2010 в 22:57)
 

Записи достаются случайно. Сначала в меню отображаются 1 'земленные' 0 и 4 'морские' 0
. Тоесть те, у которых id_parent = 0. Затем кликается на любом из них и раскрывается список. детей. Кликается на ребенке. И ребенок становиться родителем и показывает своих детей.

Ну в общем могу на живом примере показать, сайт, где работает. Если Вам, neadekvat есть куда скинуть адрес.

  Ответить  
 
 автор: neadekvat   (01.08.2010 в 23:08)   письмо автору
 
   для: Амбер   (01.08.2010 в 22:59)
 

Здесь, например, показано, как обойтись без рекурсии.
А как с рекурсией - да это стыдно спрашивать, примеров такого кода очень много

  Ответить  
 
 автор: Амбер   (01.08.2010 в 23:14)   письмо автору
 
   для: neadekvat   (01.08.2010 в 23:08)
 

так я не спрашиваю как реализовать мне рекурсию)),

я спрашиваю каким способом сейчас (в связи с появившимися на хостерах новые версии mysql) это лучше делать. Рекурсией или одним запросом. И можно ли это сделать одним запросом с учетом незнания глубины вложенности узлов

И второй вопрос, насколько это вредно за одно обновление страницы пользователем дернуть таблицу раз 50 таким к примеру запросом SELECT * FROM tab WHERE id = '$id'?

  Ответить  
 
 автор: neadekvat   (01.08.2010 в 23:18)   письмо автору
 
   для: Амбер   (01.08.2010 в 23:14)
 

Нет, что-то я не представляю себе, как это можно сделать одним запросом.

Если бд будет возвращать мне кучу записей одного уровня вложенности, плюс у каждого еще детей и детей тех детей и далее, а я средствами php должен буду отсортировывать это все..где-то теряется принцип использования бд, а?

А 50 раз - че-т многовато. Где вы там 50 раз набрали? Одна вложенность - один запрос. Это, конечно, если по одной ветке раскрывать

  Ответить  
 
 автор: Амбер   (01.08.2010 в 23:25)   письмо автору
 
   для: neadekvat   (01.08.2010 в 23:18)
 

ну да, я тоже так подумал, и не смог сделать одним запросом, хотя руки чесались конечно же)) и сделал одной мега рекурсией))

50 запросов я перебрал. А вот скажем 20 запросов. Да 200 пользоватлей еже минутно к примеру (хотя представить сложно) 200*20 = 4000 запросов к базе в минуту. Сколько там соединений допустимо в mysql. Где бы про это вообще почитать?

  Ответить  
 
 автор: neadekvat   (01.08.2010 в 23:34)   письмо автору
 
   для: Амбер   (01.08.2010 в 23:25)
 

В интернете :) И когда найдете - можете даже ссылку здесь оставить.

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

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