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

Форум MySQL

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

 

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

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

тема: Рекурсия и ORDER BY
 
 автор: Лена   (05.10.2009 в 10:31)   письмо автору
 
 

Возможно ли при рекурсии отсортировать записи в нужном порядке?
Коротко, код такой(все, что не касается проблемы, выбросила):

<?php
function Tree($parent,$level,$n) {
$q "SELECT * FROM `menu_items` WHERE `menu_items_pid` = " $parent " ORDER BY menu_items_id,pos";
//здесь опущена обработка запроса
while ($row mysql_fetch_assoc($result)) {
    
$list .= "<option value = '" $row['menu_items_id'] . "'>" $n htmlspecialchars($row['menu_items_name']) . "</option>";
//рекурсивный вызов
    
$list .= Tree($row['menu_items_id'],$level+1,$n $nbsp);
}
}
//вызов
Tree(0,0,'&nbsp;');
?>


ORDER BY menu_items_id,pos - ни по id`ам, ни по позиции сортировка не происходит

  Ответить  
 
 автор: Trianon   (05.10.2009 в 10:36)   письмо автору
 
   для: Лена   (05.10.2009 в 10:31)
 

Первичный ключ по определению уникален, а значит любая сортировка после него уже ничего не даст.
Обычно в таких ситуациях pos - более приоритетный критерий, чем первичный ключ.

ORDER BY pos,menu_items_id

  Ответить  
 
 автор: Лена   (05.10.2009 в 17:54)   письмо автору
 
   для: Trianon   (05.10.2009 в 10:36)
 

Получилось, спасибо.
Теперь пробелы перед опшенами неправильно выставляются, если уровень ненулевой. Не могу сообразить, как на последующих уровнях число пробелов увеличивать.

<?php
function Tree($parent,$level,$nbsp) {
//коннект с базой, список
global $list$link;
$q "SELECT * FROM `menu_items` WHERE `menu_items_pid` = " $parent " ORDER BY pos,menu_items_id";
$result mysql_query($q);
if(!
$result) exit(mysql_error());

if (
$parent && mysql_num_rows($result) > 0) {
$nbsp str_repeat("&nbsp;",7);
}else 
$nbsp '';

while (
$row mysql_fetch_assoc($result)) {
    
$list .= "<option value = '" $row['menu_items_id'] . "'>"  $nbsp 

htmlspecialchars($row['menu_items_name']) . "</option>";
    
$list .= Tree($row['menu_items_id'],$nbsp);
}
}

$list .= "<form action = '' method = 'post' name = 'myform'>";
$list .= "<select>";
Tree(0,0);
$list .= "</select>";
$list .= "<input type = 'submit' value = 'Отправить' name = 'mybutton'>";
$list .= "</form>";
?>

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

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