[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: UPDATE в две разные таблицы
NierRa
Я сразу прошу прощения за обилие тем, созданных мною.
Сегодня я уже спрашивал всякий познавательный для себя треш, но сейчас нужна помощь по составлению корректного mySQL запроса

function save_hero($player, $hero, $round) {
$query = "UPDATE `".CURRENT_SEASON."_players`
SET `roundHero_"
.$round."` = '".$hero."'
WHERE `name` = '"
.$player."'";
$sql = mysql_query($query) or call_user_func('db_connect_error');
if(mysql_affected_rows() > 0) {
header("Location: ".$_SERVER['REQUEST_URI']);
exit();
}
}
/* endFunction */

К этому запросу нужно добавить еще один, но в другую таблицу. Только не в виде второго отдельного запроса, а реализовать как один

"UPDATE `heroes` SET `vision` = 0 WHERE `id` = ".$id.";

Связать таблицы можно по id



Спустя 1 час, 33 минуты, 22 секунды (4.09.2012 - 03:03) inpost написал(а):
2 отдельных запроса.

Спустя 9 минут, 40 секунд (4.09.2012 - 03:12) NierRa написал(а):
Благодарю, как связать эти запросы так, чтобы в случае неудачного обновления одного из них - второй либо не исполнился, либо откатился

Я пока временно сделал так, но понимаю, что это не выход, так как тут только редирект попадает под проверку

function save_hero($player, $hero, $round) {
$query_hero = "UPDATE `".CURRENT_SEASON."_players`
SET `roundHero_"
.$round."` = '".$hero."'
WHERE `name` = '"
.$player."'";
$query_vision = "UPDATE `heroes`
SET `vision` = 0
WHERE `alias` = '"
.$hero."'";
$query_player = "UPDATE `".CURRENT_SEASON."_heroes`
SET `who_command` = '"
.$player."'
WHERE `alias` = '"
.$hero."'";
$sql_hero = mysql_query($query_hero) or call_user_func('db_connect_error');
if(mysql_affected_rows() > 0) {
$upd_hero = TRUE;
}
$sql_vision = mysql_query($query_vision) or call_user_func('db_connect_error');
if(mysql_affected_rows() > 0) {
$upd_vision = TRUE;
}
$sql_vision = mysql_query($query_player) or call_user_func('db_connect_error');
if(mysql_affected_rows() > 0) {
$upd_player = TRUE;
}
if($upd_hero and $upd_vision and $upd_player)
echo '<script>document.location.href = "'.PLACEMENT_REDIRECT.'"</script>';

} /* endFunction */

Спустя 1 час, 14 минут, 56 секунд (4.09.2012 - 04:27) inpost написал(а):
Почитай про транзакции. Это гарантия, что выполнится оба запроса.
У меня в практике 50 000 пользователей, из них всего 2 зарегистрировались без второй таблицы(!). Я имею ввиду без транзакций запрос делал.

Спустя 4 часа, 5 минут, 34 секунды (4.09.2012 - 08:33) T1grOK написал(а):
inpost - здесь конечно важный фактор отказоустойчивость сервера на котором располагается хостинг. Там где у тебя 2 ошибки, у кого то может быть 20 из-за не столь стабильного железа или программного обеспечения.
Как ни крути, но транзакции вещь толковая.

Спустя 3 часа, 41 минута, 9 секунд (4.09.2012 - 12:14) inpost написал(а):
T1grOK
Конечно, я тоже склонен к транзакциям, а выше опыт для примера привёл, чтобы учились на чужих ошибках smile.gif


_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.