Вывод номера строки отсортированной таблицы

Рейтинг: 0Ответов: 2Опубликовано: 25.02.2015

Итак, я вновь продолжаю изучение SQL. Спасибо за вашу поддержку.
На сей раз у меня новые трудности:
Предположим, у меня есть вот такой запрос

SELECT `users`.`id`, `users`.`nick`, COUNT(`user_id`) AS total
FROM (`actions`)
RIGHT JOIN `users` ON `actions`.`user_id` = `users`.`id`
GROUP BY `user_id`
ORDER BY `total` desc
LIMIT 10

который выдает вот такое результат (скриншот из phpMyAdmin).
Вопрос такой: как вывести на какой позиции в уже отсортированной таблице находится пользователь, с id равным например 19 (igola)

скриншот

Ответы

▲ 0Принят
mysql> select @a:=0;
mysql> select @a:=@a+1, aa.* from (SELECT `users`.`id`, `users`.`nick`, 
COUNT(`user_id`) AS total
FROM (`actions`)
RIGHT JOIN `users` ON `actions`.`user_id` = `users`.`id`
GROUP BY `user_id`
ORDER BY `total` desc
LIMIT 10) aa;

В результате получите нужную вам выборку, но будет-ли это работать где-нибудь, кроме как в mysql-консоли, я не проверял, но подозреваю, что нет.

Предполагая, что сами по себе sql-запросы существуют только в учебниках, а на практике - они часть приложений, написанных на каком-либо языке программирования, могу предложить следующее:

var res_ar = [];
var sql = "ваш_сложный_и_мощный_запрос";
var res_query = sql_query(sql);
res_ar = sql_fetch_to_array(res_query);
  print "ROW N \t\t ID \t\t USER \t\t TOTAL\n";
for (var i=0; i<count(res_ar); i++) {
  print i,"\t\t",res_ar[i][id],"\t\t",res_ar[i][user],"\t\t",res_ar[i][total],"\n"
}

Так вы выведите на экран (веб-страницу/файл/плоттер) вашу выборку пронумерованной.

▲ 0

Нумеровать строки при отсутствии ранжирующих ФУНКЦИЙ как-то лениво. Почитайте здесь.