SQL-запрос к БД викторины (3 версия)

mychatik

Support
Команда форума
Регистрация
26.05.15
Сообщения
502
Реакции
426
Баллы
63
Веб-сайт
mychatik.ru
Появилась задача.
Нужно вывести значок в личку для лидеров викторины, находящихся в ТОП-10.

Делаю запрос к БД
PHP:
if ($current_user->registered) {
                    require_once $data_path.'quiz/init.php';
                    require_once $quiz_config_file;
                     if (mysql_connect($quiz_config['db_server'], $quiz_config['db_user'], $quiz_config['db_pass']) && mysql_select_db($quiz_config['db_name'])) {
                    $sql = 'SELECT user_name FROM '.$quiz_config['db_prefix'].'quiz_full_stat WHERE user_id='.intval($user_id).' LIMIT 10';
                    $res = mysql_query($sql);
                    $row = mysql_fetch_array($res);
                    var_dump($row);
                   }
}


Но что-то я делаю не так. Или всё совсем не так...
Запрос работает. Но выводит не совсем то, что мне нужно. Выбирается 10-ка в произвольном порядке, а не первых 10.
К примеру, у меня:
array(2) { [0]=> string(3) "LML" ["user_name"]=> string(3) "LML" }
Хотя реально у меня не 3е место, а 22е и, по идее, мой ник не должен вообще учитываться.
У лидера ТОПа получается не 1 место, а 6е...
array(2) { [0]=> string(6) "??????" ["user_name"]=> string(6) "??????" }
И тут сразу - вторая проблема. Несоответствие кодировки для русских ников.
Делал так:
PHP:
$res = mysql_query($sql);


заменял на
PHP:
$res = mysqli_query($sql, "SET NAMES 'utf8' COLLATE 'cp1251_general_ci'");
          $res = mysqli_query($sql, "SET CHARACTER SET 'cp1251'");


Не работает. Выводит
Хотя, похоже, это мне и не нужно. :)))
Как я понимаю, запрос срабатывает для того пользователя, чья личка просматривается.
Значит мне сам ник и не нужен. Достаточно получить только его место в ТОПе от 1 до 10 (или от 0 до 9).
Ну и для информации: - у тех, кого нет ответов в викторине выводится:

Теперь собственно вопросы:
1. Как правильно составить запрос, чтобы получить только номер места пользователя (владельца профиля) в 10-ке лидеров ТОПа?
2. Как в таких случаях исправлять кодировку кириллицы (на будущее может пригодится)?
 
Последнее редактирование:

Rain

Администратор
Команда форума
Регистрация
04.09.14
Сообщения
367
Реакции
321
Баллы
63
Возраст
29
mychatik, у меня нет 3 викторины, поэтому структуру я не знаю.
Но, судя по всему, тебе сначала нужно сформировать топ, а затем уже из этого топа смотреть на каком месте находится юзер с заданным ID.
И да, здесь
Код:
array(2) { [0]=> string(3) "LML" ["user_name"]=> string(3) "LML" }
в круглых скобках указано не место а длина строки.
По тому запросу ты получаешь все строки у которых user_id = заданному, с лимитом в 10 штук.
Скинь мне викторину или хотя бы структуру ее БД, помогу с написанием скрипта.
 

Rain

Администратор
Команда форума
Регистрация
04.09.14
Сообщения
367
Реакции
321
Баллы
63
Возраст
29
Сверху Снизу