|
|
|
| Два вопроса:
1 вопрос. Возможно создать условие сортировки запроса?
id_menu | id_dir_menu | name_menu
------1---------------null-----------menu 1
------2---------------null-----------menu 2
------3-----------------1------------sub_menu
------4-----------------1------------sub_menu_2
------5 ----------------2------------sub_menu_3
SELECT id_menu, id_dir_menu, name_menu FROM menu WHERE ?????
Чтобы при запросе список сортировался так?
menu 1
- sub_menu
- sub_menu_2
menu 2
- sub_menu_2
------------------------------------------------------------------------------------------------------------------------
2 вопрос. В БД есть поле.
id_sort_menu
------1------
------2------
------3------
------4------
Когда пользователь нажимает на ссылку допустим со значением 4
<a href="sort_menu.php?id_sort_menu=<?php echo $row_detail2menu['id_sort_menu']; ?>">^</a>
запись в БД меняет 4 на число 3 (тоесть -1) а за место 3 подставляет 4(тоесть+1).
Пытался сделать так:
$menu = $_GET["id_sort_menu"];
$menu2 = $_GET["id_sort_menu"] - 1;
$sql = "update menu set id_sort_menu=$menu-1 where id_sort_menu=$menu";
$sql2 = "update menu set id_sort_menu=$menu where id_sort_menu=$menu-1 ";
mysql_query($sql);
mysql_query($sql2);
но дело в том что в этом запросе сначало обновляется первая запись и значения двух записей становятся одинаковыми.
Подскажите как можно решить эти задачи.
Заранее спасибо. | |
|
|
|
|
|
|
|
для: brys
(14.06.2007 в 16:43)
| |
$menu = $_GET["id_sort_menu"];
$menu2 = $_GET["id_sort_menu"] - 1;
$sum = $menu+$menu2;
$sql = "update menu set id_sort_menu=$sum - id_sort_menu where id_sort_menu in($menu,$menu2)";
mysql_query($sql);
|
Касательно первого вопроса.
при неограниченном числе уровней такая сортировка без выборки всего среза дерева и предварительного рекурсивного прохода по нему средствами php - невозможна.
Поскольку меню обычно не очень велико, два запроса - цена разумная.
альтернатива - применять другие методы хранения дерева: вложенные множества или материализованные пути. | |
|
|
|