Я делаю класс HighScore, который сохраняет рекорды в базе данных SQLite. Если более одного игрока набрали одинаковое количество очков, то я бы хотел, чтобы новый счет был помещен над старым в списке, а старый был бы сдвинут на одну строку вниз.
Таблица состоит из столбцов «rwId», «Score» и «Name». Сначала я сделал Score «ПЕРВИЧНЫЙ КЛЮЧ», чтобы список был отсортирован (в обратном направлении) по баллам. Но потом я подумал, что было бы лучше сделать rowId первичным ключом и установить этот идентификатор, когда счет будет сохранен. Таким образом, список будет в правильном порядке, что облегчит удаление наименьшего количества баллов позже.
В любом случае, если первичный ключ уже был получен предыдущим счетом, старый счет и все строки под ним в таблице необходимо сдвинуть на одну строку вниз.
Возможно ли это сделать?
Это то, что я до сих пор (что не так много, чтобы показать):
public function CheckRank($score) {
$this->stmt = $this->sql->prepare('SELECT score, rowId FROM highscore ORDER BY score DESC LIMIT 10;');
$this->stmt->execute();
$this->res = $this->stmt->fetchAll(PDO::FETCH_ASSOC);//Check what the 10 highest scores are an what row in the DB they're on
$i=0;
foreach ($this->res as $key => $value) {
$scorearray[$value['rowId']] = $value['score'];
$i++;
}
//Check if this score has already been set. If so, push old scores down and insert the new one
$rowsearch = array_search ($score, $scorearray);
if($rowsearch)
{
// HOW?
}
}
Задача ещё не решена.
Других решений пока нет …