Проблема с синтаксисом получения рейтинга таблицы лидеров mysqli

Я пытаюсь создать систему участников с таблицей лидеров, которая ранжирует пользователей на основе количества сердец, которые получают их сообщения. Вплоть до самой таблицы лидеров все работает нормально. Поскольку я новичок в 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;
}

Любая помощь приветствуется!


person Rob Teeuwen    schedule 11.03.2015    source источник
comment
Что это значит: WHERE (ui.score, -ui.ts) >= (uo.score, -uo.ts)?   -  person Peter Bowers    schedule 11.03.2015
comment
это довольно хорошо объяснено в ссылке, откуда я это взял (stackoverflow.com/questions/27231364/), но, насколько я понимаю, внутренний запрос подсчитывает количество строк, у которых оценка больше, чем оценка в строке, полученной внешним запросом. ts — это еще один столбец в таблице, который по какой-то причине вычитается (я удалил его, когда пытался использовать его в своем коде).   -  person Rob Teeuwen    schedule 11.03.2015
comment
Хах - такого еще не видел. По-видимому, это называется кортежем. Спасибо, что научили меня кое-чему сегодня!   -  person Peter Bowers    schedule 11.03.2015