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

mychatik

Support
Команда форума
Регистрация
26.05.15
Сообщения
482
Реакции
389
Баллы
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
Сверху Снизу