|
|
|
| например есть позиции
если убрать 2 и 5 например то тогда такое прокатит:
<?
$minpos = mresult("SELECT MIN(position) FROM menus_items WHERE id_menu = {$id} AND id_cat IN(удаляемые позиции)")*1;
//del
mysql_query("DELETE FROM menus_items WHERE id_menu = {$id} AND id_cat IN(удаляемые позиции)");
mysql_query("UPDATE menus_items SET position = position - 1 WHERE id_menu = {$id} AND position > {$minpos}");
|
а как быть если убираются числа подряд?
например 4,5? :)
ну понятное дело поменьше запроса и кода) | |
|
|
|
|
|
|
|
для: sl1p
(08.06.2010 в 19:54)
| | А какая разница?
SET position = position - 1 WHERE position > 3 | |
|
|
|
|
|
|
|
для: sim5
(08.06.2010 в 20:40)
| | такая что убирается не одна позиция а несколько, если одна согласен
1,2,3,4,5,6,7,8
уберем 2,3 значит по моей схеме надо уменьшить всё что больше 2, получится
1,3,4,6,7
ну походу здесь катит только разжовывая каждую позицию в цикле | |
|
|
|
|
|
|
|
для: sl1p
(08.06.2010 в 20:46)
| | Ну да, надо -2. Без вычислений, это минусовать позиции от большего числа к меньшему. | |
|
|
|
|
|
|
|
для: sim5
(08.06.2010 в 20:52)
| | ну так а как узнать что минус 2?
и что делать если удаляемые позиции не по порядку? | |
|
|
|
|
|
|
|
для: sl1p
(08.06.2010 в 20:55)
| | Узнать из предыдущей операции (удаления), для N позиций идущих по порядку. Надо подумать... Что-то в голове крутится, пока смутно... | |
|
|
|
|
|
|
|
для: sim5
(08.06.2010 в 21:03)
| | да оно вроде как просто но немного приламывает мозг) | |
|
|
|
|
|
|
|
для: sl1p
(08.06.2010 в 21:07)
| | Если удаляется много позиций, при чем в разных вариантах, то можно сделать запрос, получив id всех позиций, кторые больше на 1 предыдущей позиции (старшей неудаленной), отсортировав их по поции. Затем сделать запрос на обновление позиций для этих id, как номер предыдущей позиции + 1.
===
А нет, надо увеличивать на единицу исходное, то есть вводить переменную. | |
|
|
|
|
|
|
|
для: sim5
(08.06.2010 в 21:13)
| | я вобщем сделал так, надоело думать)
<?
$delPosR = mysql_query("SELECT position FROM menus_items WHERE id_menu = {$id} AND id_cat IN({$q}) ORDER BY position DESC");
while($delpos = mysql_fetch_row($delPosR))
mysql_query("UPDATE menus_items SET position = position - 1 WHERE id_menu = {$id} AND position > {$delpos[0]}");
mysql_query("DELETE FROM menus_items WHERE id_menu = {$id} AND id_cat IN({$q})");
|
| |
|
|
|