У меня есть таблица результатов, которые я хотел бы показать:Каков наилучший способ запроса изменений позиции?
| change | position | name | score |
|----------------------------------|
| - | 1 | Bob | 10 |
| +1 | 2 | Tom | 8 |
| -1 | 3 | Sam | 7 |
|----------------------------------|
Столбец изменение отражает движение положения человека, поэтому переход от 3-го до 2-го является +1, и переход от 2-го до третьего является -1 и т. Д. Итак, в приведенном выше примере, поскольку последняя игра Тома обогнала Сэма.
Могу ли я написать один оператор SQL, который содержит результаты, включая столбец «change»?
Сейчас я пишу два запроса для этого. Я получаю оценки за исключением последней игры, а затем получаю оценки, включая последнюю игру, и сравниваю, когда я рисую таблицу.
Пример:
Предыдущая игра Результаты:
SELECT p.name, p.id, SUM(g.points) AS score
FROM players p INNER JOIN games g ON p.id=g.player_id
WHERE g.id<5
ORDER BY score DESC
затем хранить их в массиве:
$i=1;
while($row = mysql_fetch_assoc($results){
$prevPositions[$row['id']] = $i++;
//render row
}
Все игры Результаты:
SELECT p.name, SUM(g.points) AS score
FROM players p INNER JOIN games g ON p.id=g.player_id
ORDER BY score DESC
А потом разработка разницы при визуализации таблицы:
$i=1;
while($row = mysql_fetch_assoc($results){
$change = $prevPositions[$row['id']] - $i++;
//render row
}
Это прекрасно работает - но я чувствовал бы себя лучше, если бы я мог использовать только один оператор, а не два.
Я не буду иметь возможность не испытать выше до следующей недели, но спасибо за предложение. – Vamos