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

Форум MySQL

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

 

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

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

тема: редактировать порядок в меню
 
 автор: vadimka   (20.01.2010 в 15:42)   письмо автору
 
 

Здравствуйте!
Пытаюсь сделать редактирование расположения (порядок) пунктов меню. Ведь если я номеру "3" присваиваю значение "1", который уже есть. Предположим номер первый тогда переименовывается в "2", а второй в "3"?
Может у кого имеется готовое решение или, извиняюсь за выражение, алгоритм?

  Ответить  
 
 автор: Zilog   (21.01.2010 в 14:23)   письмо автору
 
   для: vadimka   (20.01.2010 в 15:42)
 

я бы дробные числа с шагом использовал. Тогда и вставить не проблема.

  Ответить  
 
 автор: vadimka   (21.01.2010 в 14:24)   письмо автору
 
   для: Zilog   (21.01.2010 в 14:23)
 

нельзя ли подробнее?

  Ответить  
 
 автор: Loki   (21.01.2010 в 15:13)   письмо автору
 
   для: Zilog   (21.01.2010 в 14:23)
 

а я бы просто менял местами соседние

  Ответить  
 
 автор: Diplex   (21.01.2010 в 15:27)   письмо автору
 
   для: vadimka   (20.01.2010 в 15:42)
 

Была у меня подобная задачка, но так в стадии тестирования пока и осталась.
Объёмы информации у меня большие, поэтому для меню такой метод может и не подойдёт, но делал так:
Есть таблица (первая таблица) со всеми пунктами, для каждого пункта свой id (В Вашем случае это названия пунктов меню).
Мне нужно было для какого-то элемента из соседней таблицы (вторая таблица) присоединить несколько элементов из первой таблицы, в нужном мне порядке, и я хранил в отдельном поле - id в нужном порядке, через запятую. Если требовалось поменять местами элементы из первой таблицы, я просто менял значения через запятую во второй таблице. Знаю, что многие против этого метода, но он наиболее удобен, пусть и требует больше ресурсов.

  Ответить  
 
 автор: Trianon   (21.01.2010 в 16:37)   письмо автору
 
   для: Diplex   (21.01.2010 в 15:27)
 

В MySQL нет средств для внесения изменений в список значений.
Поэтому предлагаемый Вами метод, в случае изменяемого в процессе работы списка, наименее удобен.

  Ответить  
 
 автор: Diplex   (21.01.2010 в 16:55)   письмо автору
 
   для: Trianon   (21.01.2010 в 16:37)
 

Да, я знаю Вашу точку зрения, поэтому сразу отписался выше, что не всех устраивает :) Но мне удобнее работать с одной ячейкой...

  Ответить  
 
 автор: Trianon   (21.01.2010 в 17:02)   письмо автору
 
   для: Diplex   (21.01.2010 в 16:55)
 

Слово "мне" в том конкретном предложении не прозвучало.
Готов допустить, что Вам удобнее работать с одной ячейкой, до тех пор пока Вы не начнете работать с набором по-другому.

  Ответить  
 
 автор: Diplex   (21.01.2010 в 17:09)   письмо автору
 
   для: Trianon   (21.01.2010 в 17:02)
 

Возможно, но на данный момент удобнее менять местами. Единственное, что неудобно - это удалять из списка ненужный элемент... Но, когда скрипт уже написал, и делает всё правильно, об этом уже не задумываешься...

  Ответить  
 
 автор: Trianon   (21.01.2010 в 16:34)   письмо автору
 
   для: vadimka   (20.01.2010 в 15:42)
 

http://softtime.ru/forum/read.php?id_forum=3&id_theme=13863

  Ответить  
 
 автор: vadimka   (22.01.2010 в 14:55)   письмо автору
 
   для: Trianon   (21.01.2010 в 16:34)
 

посмотрите как я сделал, у меня работатет, пока...
нет ли тут ошибки?

#$nomerbyl  порядковый номер, который был
#$numbernew   новый порядковый номер

poryadok - таблица, отвечающая за порядо пунктов меню (рубрик) 
number - поле (цифра), отвечает за порядковый номер 
id_rubric - номер рубрики в таблице рубрик
<?
if ($nomerbyl $numbernew){
 
$sSQL2 "UPDATE poryadok SET number=number+1 WHERE number BETWEEN  '$numbernew' AND '$nomerbyl' ";
  }else{
 
$sSQL2 "UPDATE poryadok SET number=number-1 WHERE number BETWEEN '$nomerbyl' AND '$numbernew' ";
  }
  
$sSQL =  "UPDATE poryadok  SET number = '$numbernew'  WHERE id_rubrics = '".$id_rubrics."'";
  
$result2 mysql_query($sSQL2);
  
$result mysql_query($sSQL);
?>

  Ответить  
 
 автор: Trianon   (22.01.2010 в 15:01)   письмо автору
 
   для: vadimka   (22.01.2010 в 14:55)
 

> number - поле (цифра)

не понял.

вообще-то number это число.
цифра это digit

  Ответить  
 
 автор: vadimka   (22.01.2010 в 15:03)   письмо автору
 
   для: Trianon   (22.01.2010 в 15:01)
 

int(4) (сорри за неточность)

  Ответить  
 
 автор: Trianon   (22.01.2010 в 15:04)   письмо автору
 
   для: vadimka   (22.01.2010 в 15:03)
 

BETWEEN - условие , включающее хвосты отрезка.
Вы, очевидно, имели в виду другое.
и с id_rubrics не понял.
Вы по номерам их вытягиваете или по ключам?

  Ответить  
 
 автор: vadimka   (22.01.2010 в 15:08)   письмо автору
 
   для: Trianon   (22.01.2010 в 15:04)
 

id_rubrics это поле в таблице poryadok, являющейся внешним ключом на поле в таблице рубрик

  Ответить  
 
 автор: Trianon   (22.01.2010 в 15:13)   письмо автору
 
   для: vadimka   (22.01.2010 в 15:08)
 

все равно неясно, почему условие по этому ключу проверяется только во втором запросе, а не в обоих.
И почему во втором запросе не проверяетя, какой именно элемент перемещается.

Вы сами-то пробовали запустить?

  Ответить  
 
 автор: vadimka   (22.01.2010 в 15:32)   письмо автору
 
   для: Trianon   (22.01.2010 в 15:13)
 


$query2 ="SELECT number  FROM poryadok WHERE id_rubrics = '".$id_rubrics."'";
$result2 = mysql_query($query2);
$row2 = mysql_fetch_array($result2);
$nomerbyl=$row2[number];

Проверка откуда берется $nomerbyl?
А про BETWEEN - имеется в виду, что может при удалении рубрики нарушится последовательность номеров?
Так можно при удалении рубрики и записи, с связанной с ней в таблице poryadok уменьшить все последующие номера number на единицу .
Да тестирую - все пока, работает....

  Ответить  
 
 автор: Legenda   (25.01.2010 в 12:04)   письмо автору
 
   для: vadimka   (20.01.2010 в 15:42)
 

Я как-то тоже столкнулся с такой проблемой, час помучался и решил.

Короче если на пальцах, устанавливаешь для сортировки поле к примеру sort и при добавлении новых записей в таблицу считаешь кол-во строк в таблице меню. Соответственно добавляя новое значение sort кол-во строк + 1. При удалении строки из таблицы меню, тоже считаешь строки и проверяешь, если значение sort удаляемого поля не равно количеству строк в таблице, то выдергиваешь строку с предпоследним значением и ставишь ее на место удаляемой. Только потом удаляешь нужную строку. Соответственно можно менять пункты меню местами, вычисляя их позицию и меняя местами ключи сортировки. При этом обрати внимание что поле sort должно быть цельночисленного типа, к примеру int

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

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