Я пытаюсь обновить таблицу с позициями пользователя на основе их общей метки с помощью этого запроса
$default='0';
mysql_select_db($database_catchapp, $catchapp);
$updateSQL = sprintf("UPDATE competitors SET position= $default= ($default+1) ORDER BY score DESC" );
$Result= mysql_query($updateSQL, $db) or die(mysql_error());
Но когда я его выполняю, он обновляет позиции с 0 от первой записи до последней. Я ожидаю, что он должен обновлять позиции на основе общего балла от 1
до последней записи
$default='0';
объявляется как строка.
Сделайте это так:
$default=0;
mysql_select_db($database_catchapp, $catchapp);
$default= ($default+1) ;
$updateSQL = sprintf("UPDATE competitors SET position= $default ORDER BY score DESC" );
Это не информация, которую вы вставляете в базу данных, это информация, которую вы используете для расчета и извлечения базы данных.
У каждого конкурента уже есть оценка, введенная в базу данных, если вы попытаетесь сохранить свои позиции, тогда вам нужно пересчитать это каждый раз, когда оценка меняет и сохраняет все.
Это бессмысленно, потому что перечисление их по положению - это просто способ сортировки данных, а сортировка данных - это то, на чем хорошо работают компьютеры.
Если вы запустите SELECT * FROM competitors ORDER BY score DESC
вы получите результаты по рангу. Если вам нужен столбец с пробелом, попробуйте это:
SET @rank = 0; SELECT *, (SELECT @rank:=@rank + 1) AS rank FROM competitors ORDER BY score DESC