Я пытаюсь создать систему участников с таблицей лидеров, которая ранжирует пользователей на основе количества сердец, которые получают их сообщения. Вплоть до самой таблицы лидеров все работает нормально. Поскольку я новичок в mysqli, я искал способ получить рейтинг пользователя, не создавая каждый раз всю таблицу лидеров. Я нашел эту тему: MySQL Get Rank from Leaderboards, в которой используется это решение:
SELECT uo.*,
(
SELECT COUNT(*)
FROM Scores ui
WHERE (ui.score, -ui.ts) >= (uo.score, -uo.ts)
) AS rank
FROM Scores uo
WHERE name = '$name';
Кажется, это имеет смысл, и я понимаю структуру, но я не могу понять, как поместить это в утверждение, которое действительно работает. Я пытаюсь использовать подготовленные операторы в обычном режиме, но я не уверен, что это работает с этим синтаксисом (у меня не получилось заставить его работать). В конце концов я превратил все это в следующий код, что привело к отображению «$ count_heart», что равно 0 и «не годится».
if ($sql = $db->prepare("SELECT musichearts FROM members WHERE id = ?")) {
$sql->bind_param('i',$id);
$sql->execute();
$sql->bind_result($count_heart);
while ($sql->fetch()) {
if ($sql2 = $db->prepare("SELECT COUNT(*) FROM members WHERE (musichears > ?)")) {
$sql2->bind_param('i',$count_heart);
$sql2->execute();
$col1 = null;
$sql2->bind_result($hearts_musi);
while ($sql2->fetch()) {
echo "counted {$col1} records\n";
}
$sql2->close();
} else {
echo "no good";
}
}
echo $count_heart;
echo $hearts_musi;
}
Любая помощь приветствуется!
WHERE (ui.score, -ui.ts) >= (uo.score, -uo.ts)
? - person Peter Bowers   schedule 11.03.2015