|
|
|
| Здравствуйте!
Пытаюсь сделать редактирование расположения (порядок) пунктов меню. Ведь если я номеру "3" присваиваю значение "1", который уже есть. Предположим номер первый тогда переименовывается в "2", а второй в "3"?
Может у кого имеется готовое решение или, извиняюсь за выражение, алгоритм? | |
|
|
|
|
|
|
|
для: vadimka
(20.01.2010 в 15:42)
| | я бы дробные числа с шагом использовал. Тогда и вставить не проблема. | |
|
|
|
|
|
|
|
для: Zilog
(21.01.2010 в 14:23)
| | нельзя ли подробнее? | |
|
|
|
|
|
|
|
для: Zilog
(21.01.2010 в 14:23)
| | а я бы просто менял местами соседние | |
|
|
|
|
|
|
|
для: vadimka
(20.01.2010 в 15:42)
| | Была у меня подобная задачка, но так в стадии тестирования пока и осталась.
Объёмы информации у меня большие, поэтому для меню такой метод может и не подойдёт, но делал так:
Есть таблица (первая таблица) со всеми пунктами, для каждого пункта свой id (В Вашем случае это названия пунктов меню).
Мне нужно было для какого-то элемента из соседней таблицы (вторая таблица) присоединить несколько элементов из первой таблицы, в нужном мне порядке, и я хранил в отдельном поле - id в нужном порядке, через запятую. Если требовалось поменять местами элементы из первой таблицы, я просто менял значения через запятую во второй таблице. Знаю, что многие против этого метода, но он наиболее удобен, пусть и требует больше ресурсов. | |
|
|
|
|
|
|
|
для: Diplex
(21.01.2010 в 15:27)
| | В MySQL нет средств для внесения изменений в список значений.
Поэтому предлагаемый Вами метод, в случае изменяемого в процессе работы списка, наименее удобен. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2010 в 16:37)
| | Да, я знаю Вашу точку зрения, поэтому сразу отписался выше, что не всех устраивает :) Но мне удобнее работать с одной ячейкой... | |
|
|
|
|
|
|
|
для: Diplex
(21.01.2010 в 16:55)
| | Слово "мне" в том конкретном предложении не прозвучало.
Готов допустить, что Вам удобнее работать с одной ячейкой, до тех пор пока Вы не начнете работать с набором по-другому. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2010 в 17:02)
| | Возможно, но на данный момент удобнее менять местами. Единственное, что неудобно - это удалять из списка ненужный элемент... Но, когда скрипт уже написал, и делает всё правильно, об этом уже не задумываешься... | |
|
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: vadimka
(22.01.2010 в 14:55)
| | > number - поле (цифра)
не понял.
вообще-то number это число.
цифра это digit | |
|
|
|
|
|
|
|
для: Trianon
(22.01.2010 в 15:01)
| | int(4) (сорри за неточность) | |
|
|
|
|
|
|
|
для: vadimka
(22.01.2010 в 15:03)
| | BETWEEN - условие , включающее хвосты отрезка.
Вы, очевидно, имели в виду другое.
и с id_rubrics не понял.
Вы по номерам их вытягиваете или по ключам? | |
|
|
|
|
|
|
|
для: Trianon
(22.01.2010 в 15:04)
| | id_rubrics это поле в таблице poryadok, являющейся внешним ключом на поле в таблице рубрик | |
|
|
|
|
|
|
|
для: vadimka
(22.01.2010 в 15:08)
| | все равно неясно, почему условие по этому ключу проверяется только во втором запросе, а не в обоих.
И почему во втором запросе не проверяетя, какой именно элемент перемещается.
Вы сами-то пробовали запустить? | |
|
|
|
|
|
|
|
для: 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 на единицу .
Да тестирую - все пока, работает.... | |
|
|
|
|
|
|
|
для: vadimka
(20.01.2010 в 15:42)
| | Я как-то тоже столкнулся с такой проблемой, час помучался и решил.
Короче если на пальцах, устанавливаешь для сортировки поле к примеру sort и при добавлении новых записей в таблицу считаешь кол-во строк в таблице меню. Соответственно добавляя новое значение sort кол-во строк + 1. При удалении строки из таблицы меню, тоже считаешь строки и проверяешь, если значение sort удаляемого поля не равно количеству строк в таблице, то выдергиваешь строку с предпоследним значением и ставишь ее на место удаляемой. Только потом удаляешь нужную строку. Соответственно можно менять пункты меню местами, вычисляя их позицию и меняя местами ключи сортировки. При этом обрати внимание что поле sort должно быть цельночисленного типа, к примеру int | |
|
|
|