Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2011, 23:51   #1
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию Обновление двух строк одним запросом

Здравствуйте. Игра крестики нолики(на двоих), необходимо записать результат в базу данных. Результатом будет +1 к счетчику побед/поражений. В два запроса я могу это сделать, но как объединить в 1?
Код:
UPDATE table1 SET win=win+1 WHERE id=id1;
UPDATE table1 SET lose=lose+1 WHERE id=id2;
Упс...
L_M вне форума Ответить с цитированием
Старый 29.01.2011, 23:58   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а в чем проблема 2х запросов?
если хочется сделать все за один вызов, то стоит написать небольшую ХП, в которую передавать параметрами winner_id, loser_id, а внутри ХП уже делать оба апдейта
soleil@mmc вне форума Ответить с цитированием
Старый 30.01.2011, 00:17   #3
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
а в чем проблема 2х запросов?
если хочется сделать все за один вызов, то стоит написать небольшую ХП, в которую передавать параметрами winner_id, loser_id, а внутри ХП уже делать оба апдейта
хм-м. А вот что такое ХП?
Упс...
L_M вне форума Ответить с цитированием
Старый 30.01.2011, 01:18   #4
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

ХП - хранимая процедура (читаем книги)

Код:
UPDATE table1 
     SET case when id=id1 then win=win+1 else lose=lose+1 end
  WHERE id=id1 or id=id2;
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 31.01.2011, 12:54   #5
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию

Цитата:
Сообщение от XeruH Посмотреть сообщение
Код:
UPDATE table1 
     SET case when id=id1 then win=win+1 else lose=lose+1 end
  WHERE id=id1 or id=id2;
Для проверки написал небольшой скрипт
PHP код:
<?
    $a
=mysql_connect('localhost','root','');
    
$a=mysql_query('CREATE DATABASE test_upd'); 
    
$a=mysql_selectdb('test_upd');
    
$a=mysql_query('CREATE TABLE us(aa INT(2), bb INT(2))');
    
$a=mysql_query('INSERT INTO us(aa,bb) VALUES(1,1)');
    
$a=mysql_query('INSERT INTO us(aa,bb) VALUES(2,2)'); 
    
$a=mysql_query('UPDATE us SET case when aa=1 then bb=5 else bb=7 end case'); 
    print 
mysql_error();
?>
Который возвратил
You have an error in your SQL syntax;
Почему?
Упс...
L_M вне форума Ответить с цитированием
Старый 03.02.2011, 02:01   #6
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Потому что в MySql синтаксис case может быть другой.
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инвертировать значение поля (INT) одним запросом InternetStranger SQL, базы данных 7 04.08.2010 11:50
Пересечение двух строк DarkMage Общие вопросы C/C++ 5 18.04.2010 18:27
сравнение двух строк aza_kaz Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 01.01.2010 23:40
двумерный динамический массив с запросом к пользователю о кол-ве строк и столбцов? vasyapupkin Общие вопросы C/C++ 2 22.11.2009 17:37
BETWEEN и LIKE одним запросом Pinya SQL, базы данных 9 19.08.2008 11:30