Автоматическое обновление позиции пользователя на основе итоговой оценки с помощью PHP и MySQL

0

Я пытаюсь обновить таблицу с позициями пользователя на основе их общей метки с помощью этого запроса

$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 до последней записи

Теги:

2 ответа

0
$default='0';

объявляется как строка.

Сделайте это так:

$default=0;
mysql_select_db($database_catchapp, $catchapp);
$default= ($default+1) ;
$updateSQL = sprintf("UPDATE competitors SET position= $default ORDER BY score DESC" );
0

Это не информация, которую вы вставляете в базу данных, это информация, которую вы используете для расчета и извлечения базы данных.

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

Это бессмысленно, потому что перечисление их по положению - это просто способ сортировки данных, а сортировка данных - это то, на чем хорошо работают компьютеры.

Если вы запустите SELECT * FROM competitors ORDER BY score DESC вы получите результаты по рангу. Если вам нужен столбец с пробелом, попробуйте это:

SET @rank = 0; SELECT *, (SELECT @rank:=@rank + 1) AS rank FROM competitors ORDER BY score DESC

  • 0
    Я знаю, что могу легко получить это с помощью оператора select, но я хочу сделать это, как в вопросе
  • 0
    Я не понимаю, зачем тебе это нужно?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню