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 :: 1 запрос на 2 деиствия

 PHP.SU

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


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

> Описание: +1 и -1 в записе
pantela
Отправлено: 03 Декабря, 2010 - 01:20:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


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




Есть таблица с полем `ordering` int (3)

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `video` (
  2.   `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `ordering` int(3) UNSIGNED NOT NULL,
  4.   `title_ru` varchar(50) collate utf8_unicode_ci NOT NULL,
  5.   `desc_ru` text collate utf8_unicode_ci,
  6.   PRIMARY KEY  (`id`)
  7. ) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=28 ;


`ordering` - у меня поле для сортировки, надо сделать запрос при котором запись будет в поле увеличиватся на +1 или уменшатся на -1.

напр.

У меня есть записа:

CODE (html):
скопировать код в буфер обмена
  1. Алик (ordering = 5)
  2. Миша (ordering = 4)
  3. Саша (ordering = 3)
  4. Олег (ordering = 2)
  5. Маша (ordering = 1)


надо сделать 2 кнопки (наверное через функцию) через оторую будет происходить 2 запрос:

напр. на запись Олег нажымаю на кнопку +1. тогда должно получится после запроса у Олег (ordering = 3)
Олег (ordering = 2)

т.е. по сортировке получается что Олег повисился на +1 выше, а Саша автоматический уменьшился на -1.

Думаю всё понятно.

Тоже самое если я сделаю на запись Олег нажимаю на кнопку -1. тогда должно получится после запроса у Олег (ordering = 1)
Маша (ordering = 2)
CODE (html):
скопировать код в буфер обмена
  1. Алик (ordering = 5)
  2. Миша (ordering = 4)
  3. Саша (ordering = 3)
  4. Маша (ordering = 2)
  5. Олег (ordering = 1)


P.S. Если есть идеи как можно более правильно реализовать и управлять сортировками крайне привествую. спс.

(Отредактировано автором: 03 Декабря, 2010 - 01:21:51)

 
 Top
Viper
Отправлено: 03 Декабря, 2010 - 08:27:08
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `video` SET `ordering` = `ordering`+1 WHERE условие

то же самое на уменьшение
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `video` SET `ordering` = `ordering`-1 WHERE условие


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
umka
Отправлено: 03 Декабря, 2010 - 11:43:40
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Дек. 2010  


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




Одним UPDATE-ом этого не сделать Улыбка
 
 Top
pantela
Отправлено: 03 Декабря, 2010 - 11:49:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


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




Viper
спс. но этого вроде всего лишь запрос, а вот тут главный момент играет роль условие, где должно определятся кокое уменшать и кокое увеличивать.

Уменшается то, которая больше того которое я хочю повисить.

т.е. алгоритм токой: Если я увеличиваю А, тогда уменшается Б
 
 Top
OrmaJever Модератор
Отправлено: 03 Декабря, 2010 - 13:53:59
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




pantela ну как я понял есть всего 5 ступеней. И они простоменяется местами.
Я вот не сильно знаю как обьеденить sql запросы но это можно зделать в 3-4 запроса.
1) берём ordering для указаного имени. (имя можно передать гетом)
2) затем берём имя того кто на 1 больше или 1 меньше. (+ или - также передать через гет например ?name=олег&x=plus)
3) апдейтим запись олега на +1 или -1 (смотря что передано в гет) и апдейтим записьтого кто рядом.
В итоге должо получится както так
PHP:
скопировать код в буфер обмена
  1. $ord = mysql_result(mysql_query('SELECT ordering FROM tbl WHERE title_ru="'.mysql_escape_string($_GET['name']).'"'), 0);
  2.  
  3. switch($_GET['x'])
  4. {
  5.         case 'plus':
  6.                 $name = mysql_result(mysql_query('SELECT title_ru FROM tbl WHERE ordering="'.($ord+1).'"'), 0);
  7.                 mysql_query('UPDATE tbl SET ordering = "'.($ord+1).'" WHERE title_ru = "'.mysql_escape_string($_GET['name']).'"');
  8.                 mysql_query('UPDATE tbl SET ordering = "'.$ord.'" WHERE title_ru = "'.$name.'"');
  9.  
  10.         break;
  11.  
  12.         case 'minus':
  13.             $name = mysql_result(mysql_query('SELECT title_ru FROM tbl WHERE ordering="'.($ord-1).'"'), 0);
  14.             mysql_query('UPDATE tbl SET ordering = "'.($ord-1).'" WHERE title_ru = "'.mysql_escape_string($_GET['name']).'"');
  15.                 mysql_query('UPDATE tbl SET ordering = "'.$ord.'" WHERE title_ru = "'.$name.'"');
  16.         break;
  17. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 03 Декабря, 2010 - 14:06:25
Post Id



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


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


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




А вот если коцать эти плюсы и минусы очень быстро (да да - всего с нескольких браузеров), то база не успеет обработать все запросы и некоторые из них "потеряет".. и если вся эта штука еще и на ajax висеть будет, то у разных юзеров будет разные результаты на экране..
Для того чтобы это не происходило необходимо любым способом лочить момент перезаписи... Вообще такие вещи решаются использованием разделяемой памяти - там можно лочить семафоры и тормозить не будет...
 
 Top
pantela
Отправлено: 03 Декабря, 2010 - 14:17:41
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


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




OrmaJever
спасибо большое попробую ваш коди.

DeepVarvar
Делается чисто на php без ajax, делает что-то типо портфолио для студии, вот и им надо сделать токую функцию где будут менять местами работы в портфолио.

напр. в Joomla и в других CMS вить реализованно как-то это часть, по управлениями местами материалов, модулей и.т.д.
 
 Top
DeepVarvar Супермодератор
Отправлено: 03 Декабря, 2010 - 14:21:12
Post Id



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


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


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




pantela пишет:
Делается чисто на php без ajax

Тогда все гут... И не заморачивайся... Просто имею горький опыт разработки "живого" окна. Сперва сделал все на базе, а она не успевала.. Пришлось перелопачивать весь класс и переписывать его на shm.....
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB