SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.10.2008 18:02:42

dmitrybelyakov
Участник
Зарегистрирован: 28.10.2008
Сообщений: 1

Пожалуйста помогите разобраться

Добрый день,

Есть таблица 'users' следующей структуры:

CREATE TABLE `users` (
  `id` int(254) NOT NULL auto_increment,
  `firstname` varchar(254) NOT NULL,
  `lastname` varchar(254) NOT NULL,
  `votes` int(10) NOT NULL default '0',
  PRIMARY KEY  (`id`)
)

в поле 'votes' хранится рейтинг пользователя.

Как к SELECT запросу ORDER BY 'votes' прицепить позицию в общем зачете, то есть позицию данного конкретного пользователя по рейтингу?


Буду благодарен за любую помощь и подсказки.
Дмитрий.

Неактивен

 

#2 28.10.2008 18:04:26

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Пожалуйста помогите разобраться

SET @cnt:=0;

SELECT id, @cnt:=@cnt+1 AS pos FROM users ORDER BY votes DESC;

Неактивен

 

#3 28.11.2008 23:56:35

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 848

Re: Пожалуйста помогите разобраться

Чтоб не заводить новую тему, спрошу здесь.

Допустим, не хочется два запроса делать. Почему

SELECT @cnt := IFNULL(@cnt, 0) + 1 FROM tbl

возвращает во всех строках единицу? (т.е., получается, не присваивает @cnt после выполнения для первой строки)

Неактивен

 

#4 29.11.2008 00:32:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: Пожалуйста помогите разобраться

У меня такая же ситуация.
Но что удивительно, если выполнить запрос повторно, то будет всё ok (т.е. увеличиваться на единицу)
Но что ещё более удивительнго, если первоначально явно задать переменную как null, т.е.

set @c:=null;
, то все тоже будет правильно работать.

Версия 5.1.21-beta-community

Неактивен

 

#5 01.12.2008 18:29:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Пожалуйста помогите разобраться

Подозреваю, что это бага в оптимизаторе. Он выкидывает IFNULL из рассмотрения, считая
ее константной функцией sad

И дело именно в том, что он не знает, что это такое до того, как оно создастся. А создается
оно после прохода оптимизатора sad

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson