Как сделать несколько математических уравнений в одном MySQL обновлении базы данных? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть строка базы данных MySQL, в которой хранятся попытки и средний счет игры:

+-----+----------+-----------+
| uid | attempts | avg_score |
|  4  |    3     |    15     |
+-----+----------+-----------+

После того, как пользователь закончит игру, я хочу обновить две таблицы, чтобы выяснить новые средний на основе нового испытания. Я хочу:
умножить (попытки * avg_score = 45)
добавить trial_score к общему avg_score (avg_score (45) + trial_score (5) = 50)
делить (avg_score (45) + trial_score (5) / попытки = попытки + 1)

Это немного по моей голове с PHP mySQL заявлениями. Я покажу свою попытку ниже.

$sql=("UPDATE gamescore SET attempts = attempts + 1,avg_score = ((attempts * avg_score + ?) / (attempts = attempts + 1)) WHERE uid=?");
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii",$_POST['trial_score'],$_SESSION['uid']);
$stmt->execute();

Не удалось ... очевидно ... Что мне нужно исправить здесь? Спасибо!

1 Ответ

1 голос
/ 01 апреля 2020

Вы должны делить на (attempts + 1), а не (attempts = attempts + 1). Также сначала установите значение avg_score, а затем attempts, потому что если сначала задать attempts, то значение в выражении, которое устанавливает значение avg_score MySql, будет использовать измененный attempts (вы можете найти больше здесь ):

UPDATE gamescore  
SET avg_score = (attempts * avg_score + ?) / (attempts + 1),
    attempts = attempts + 1 
WHERE uid = ?;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...