Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Рекурсивная функция [4]
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Рекурсивная функция

Страниц (4): « 1 2 3 [4]
 

46. DeepVarvar - 25 Августа, 2011 - 18:52:24 - перейти к сообщению
egir пишет:
Тпереб при заходе в тему id=97426 нужно найти ее родителя. Вы делаете запрос:

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.id,t1.name,t2.id pid,t2.name pname
  2.   FROM tbl t1 LEFT JOIN tbl t2 ON t2.id = t1.parent_id WHERE t1.id = $id;

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.id,t1.name,t2.id pid,t2.name pname FROM tbl t1,tbl t2
  2.   WHERE t1.id = $id AND t1.parent_id = t2.id;

(Добавление)
Всего один запрос...
Выберите какой из вариантов вам больше нравится.
47. egir - 25 Августа, 2011 - 19:18:00 - перейти к сообщению
DeepVarvar пишет:
egir пишет:
Тпереб при заходе в тему id=97426 нужно найти ее родителя. Вы делаете запрос:

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.id,t1.name,t2.id pid,t2.name pname
  2.   FROM tbl t1 LEFT JOIN tbl t2 ON t2.id = t1.parent_id WHERE t1.id = $id;

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.id,t1.name,t2.id pid,t2.name pname FROM tbl t1,tbl t2
  2.   WHERE t1.id = $id AND t1.parent_id = t2.id;

(Добавление)
Всего один запрос...
Выберите какой из вариантов вам больше нравится.


Второй нравится)) Только таблица у нас одна, в ней 100 записей и у элемента родителя которого мы ищем, 4 предка. То-есть вместе с элементом 5 записей. Попробуйте воспроизвести ситуацию с реальной таблицей. Если не ошибаюсь то в результате будет одна запись. И с двумя таблицами кажется тоже не работает.
48. DeepVarvar - 25 Августа, 2011 - 19:28:59 - перейти к сообщению
egir пишет:
олько таблица у нас одна
Оба варианта про одну таблицу.
egir пишет:
кажется

Вам только кажется.
Насколько я понял задачу:
Таблица одна.
Известен id текущей записи.
Нужно достать родителя и всех братьев и сестер,
на данном уровне вложенности одним запросом:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT c.id,c.name,p.id pid,p.name pname
  2.   FROM tbl c
  3.   LEFT JOIN tbl p ON p.id = c.parent_id
  4.   WHERE c.id = $id OR c.parent_id = p.id
  5.   GROUP BY c.id
49. egir - 25 Августа, 2011 - 21:23:18 - перейти к сообщению
DeepVarvar пишет:
egir пишет:
олько таблица у нас одна
Оба варианта про одну таблицу.
egir пишет:
кажется

Вам только кажется.
Насколько я понял задачу:
Таблица одна.
Известен id текущей записи.
Нужно достать родителя и всех братьев и сестер,
на данном уровне вложенности одним запросом:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT c.id,c.name,p.id pid,p.name pname
  2.   FROM tbl c
  3.   LEFT JOIN tbl p ON p.id = c.parent_id
  4.   WHERE c.id = $id OR c.parent_id = p.id
  5.   GROUP BY c.id


Если работает, отлично. Но я говорил про тот пример что вы давали с выборкой всех записей. А по поводу этого, скиньте плиз дамп базы вида указанного мной выше, и запросик под нее, чтобы протестить.
50. DeepVarvar - 25 Августа, 2011 - 21:35:54 - перейти к сообщению
egir пишет:
про тот пример что вы давали с выборкой всех записей
Я говорил что не видел в жизни построения МЕНЮ с подкатегориями где количество элементов больше ~200, поэтому именно для случая с выводом древовидной структуры меню - это то самое что нужно.
egir пишет:
скиньте плиз дамп базы вида указанного мной выше, и запросик под нее, чтобы протестить

Ну так сами сделайте базу, напишите запрос и потестируйте.

 

Powered by ExBB FM 1.0 RC1