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 :: Версия для печати :: Как сделать сложный запрос
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Как сделать сложный запрос

Страниц (1): [1]
 

1. dsb80 - 09 Мая, 2010 - 23:47:42 - перейти к сообщению
Есть таблица
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE db.menu(
  3.   id MEDIUMINT(9) NOT NULL AUTO_INCREMENT,
  4.   menu_name CHAR(32) DEFAULT NULL COMMENT 'пункт',
  5.   levup_menu INT(11) DEFAULT 0 COMMENT 'родительуский элемент пункта ',
  6.   link CHAR(128) DEFAULT NULL COMMENT 'ссылка',
  7.   turn INT(2) DEFAULT 0 COMMENT 'очередность  вывода относительно родительского пункта',
  8.   PRIMARY KEY (id)
  9. )
  10.  

Нужно выводить пункты в виде дерева т.е.

1.
|_1.1
|_1.2
2
|_2.1
|_2.2
|_2.3
3....

Нужно сотавикть запрос чтото типа
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM (SELECT * FROM menu ORDER BY turn) ORDER BY turn;

Но чтото у меня не получается... Мож кто подскажет?
2. JustUserR - 10 Мая, 2010 - 02:01:09 - перейти к сообщению
dsb80 пишет:
Нужно выводить пункты в виде дерева т.е.
Если вас интересует создание меню и подобной навигации то лучше поступить таким образом - вы считываете все имеющиеся записи из таблицы и в PHP-скрипте рекурсивно строите хеш-массив по следующему принципу - сначала идут все корневые элементы причем имя элемента это имя ключа в хеш-массиве а значение элемента это ссылка на дочерний подмассив - такой подход дает возможность строить деревья произвольной глубины
3. dsb80 - 10 Мая, 2010 - 02:50:21 - перейти к сообщению
JustUserR пишет:
PHP-скрипте рекурсивно строите хеш-массив

ИМХО мудреное чтото получится...
"Велосипед" у меня както так получился
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT menu_name,levup_menu AS forid, IF(levup_menu = 0, turn, turn/100+ (SELECT turn FROM menu WHERE id= forid)) AS weight FROM menu   ORDER BY weight ;


Степень вложенности 2,а болше ненадо. Хотя такие запросы не есть хорошо.
4. valenok - 10 Мая, 2010 - 07:19:53 - перейти к сообщению
http://dev[dot]mysql[dot]com/tech-resour[dot][dot][dot]chical-data[dot]html
5. JustUserR - 10 Мая, 2010 - 11:02:17 - перейти к сообщению
dsb80 пишет:
PHP-скрипте рекурсивно строите хеш-массив
ИМХО мудреное чтото получится...
"Велосипед" у меня както так получился
На самом деле в рекурсивном построении дерева ничего сложного нет - учитывая что в PHP можно передавать данные в функцию по жесткой ссылке & - то вам достаточно перебирать каждый элемент определенного уровня вложенности и передавать далее на обработку
Можете поиска я не так давно писал PHP-функцию на форуме для построения такого дерева - причем в полностью аналогичной задаче

 

Powered by ExBB FM 1.0 RC1