Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Апдейт порядка сортировки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
DeepVarvar Супермодератор
Отправлено: 18 Марта, 2015 - 11:48:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Есть таблица tbl, с полями id, pid (вышестоящая сущность) и sort.
Есть жквери сортабля.
После того как пользак поиграется с блочеками, я отправляю аяксом список айдишников.
В каком порядке они ко мне приехали, в таком порядке считается нужно и сортировку заапдейтить.

Сделал так:
PHP:
скопировать код в буфер обмена
  1. $arr = array(12,45,88,33,126);
  2. $ifChain = '';
  3. foreach ($arr as $k => $item) {
  4.     $sort = $k + 1;
  5.     $ifChain .= "IF(id = {$item}, sort = {$sort}, ";
  6. }
  7. $ifChain .= 'sort = sort' . str_repeat(')', $sort);
  8. $arr = join(',', $arr);
  9.  
  10. echo "
  11. UPDATE tbl SET
  12.    $ifChain
  13.    WHERE pid = 22
  14.        AND id IN({$arr})
  15.  
  16. ";

Выводит:
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE tbl SET
  2.     IF(id = 12, sort = 1, IF(id = 45, sort = 2, IF(id = 88, sort = 3, IF(id = 33, sort = 4, IF(id = 126, sort = 5, sort = sort)))))
  3.     WHERE pid = 22
  4.         AND id IN(12,45,88,33,126)

Какие еще есть варианты?
 
 Top
Мелкий Супермодератор
Отправлено: 18 Марта, 2015 - 12:06:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE tbl
  2. SET
  3.     sort = FIELD(id, 12,45,88,33,126)
  4. WHERE pid = 22
  5.     AND id IN(12,45,88,33,126)

?


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Марта, 2015 - 21:39:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Так и не попробовал )) Верю что работает. Завтра.
 
 Top
Мелкий Супермодератор
Отправлено: 18 Марта, 2015 - 22:24:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar пишет:
Верю что работает.

А я нет Язычок
Сперва хотел предложить sort = case /*when then*/ - его проще генерить чем груду if'ов, а потом вспомнил про типичное решение задачи "сделать сортировку результата как в in" как раз через field


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB