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

Форум PHP

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

 

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

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

тема: Помогите решить задачку с позициями:)
 
 автор: sl1p   (08.06.2010 в 19:54)   письмо автору
 
 

например есть позиции

1,2,3,4,5,6,7,8

если убрать 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? :)

ну понятное дело поменьше запроса и кода)

  Ответить  
 
 автор: sim5   (08.06.2010 в 20:40)   письмо автору
 
   для: sl1p   (08.06.2010 в 19:54)
 

А какая разница?
SET position = position - 1 WHERE position > 3

  Ответить  
 
 автор: sl1p   (08.06.2010 в 20:46)   письмо автору
 
   для: sim5   (08.06.2010 в 20:40)
 

такая что убирается не одна позиция а несколько, если одна согласен

1,2,3,4,5,6,7,8
уберем 2,3 значит по моей схеме надо уменьшить всё что больше 2, получится
1,3,4,6,7

ну походу здесь катит только разжовывая каждую позицию в цикле

  Ответить  
 
 автор: sim5   (08.06.2010 в 20:52)   письмо автору
 
   для: sl1p   (08.06.2010 в 20:46)
 

Ну да, надо -2. Без вычислений, это минусовать позиции от большего числа к меньшему.

  Ответить  
 
 автор: sl1p   (08.06.2010 в 20:55)   письмо автору
 
   для: sim5   (08.06.2010 в 20:52)
 

ну так а как узнать что минус 2?
и что делать если удаляемые позиции не по порядку?

  Ответить  
 
 автор: sim5   (08.06.2010 в 21:03)   письмо автору
 
   для: sl1p   (08.06.2010 в 20:55)
 

Узнать из предыдущей операции (удаления), для N позиций идущих по порядку. Надо подумать... Что-то в голове крутится, пока смутно...

  Ответить  
 
 автор: sl1p   (08.06.2010 в 21:07)   письмо автору
 
   для: sim5   (08.06.2010 в 21:03)
 

да оно вроде как просто но немного приламывает мозг)

  Ответить  
 
 автор: sim5   (08.06.2010 в 21:13)   письмо автору
 
   для: sl1p   (08.06.2010 в 21:07)
 

Если удаляется много позиций, при чем в разных вариантах, то можно сделать запрос, получив id всех позиций, кторые больше на 1 предыдущей позиции (старшей неудаленной), отсортировав их по поции. Затем сделать запрос на обновление позиций для этих id, как номер предыдущей позиции + 1.
===
А нет, надо увеличивать на единицу исходное, то есть вводить переменную.

  Ответить  
 
 автор: sl1p   (08.06.2010 в 22:49)   письмо автору
 
   для: 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})");

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

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