SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 12.09.2009 22:29:51

Gefest
Участник
Зарегистрирован: 12.07.2009
Сообщений: 6

Помогите с условием

Начну по порядку: Есть двойная сортировка юзеров по полю rating DESC, id DESC.
В анкете юзера решил сделать информацию о его позиции в рейтинге:
SELECT COUNT(u.id)+1 FROM users AS u WHERE u.rating >= (SELECT rating FROM users WHERE id = '".$USER['id']."') Запрос получает число юзеров, рейтинг которых выше, или равен данному юзеру, но нужно отфильтровывать тех, чей id ниже моего в случае, если их рейтинг равен моему.

Неактивен

 

#2 13.09.2009 04:43:56

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

Re: Помогите с условием

SET @i = 1, @p = 1;

SELECT @i FROM (SELECT id FROM users ORDER BY rating DESC, id DESC) t WHERE @p AND IF(id=".$USER['id'].",@p:=0,@i:=@i+1);
 

Неактивен

 

#3 13.09.2009 22:33:37

Gefest
Участник
Зарегистрирован: 12.07.2009
Сообщений: 6

Re: Помогите с условием

Спасибо, но код все-таки работает не корректно, не возвращает либо ничего, либо во всех случаях 2

Неактивен

 

#4 13.09.2009 23:02:33

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

Re: Помогите с условием

Пардон, раннее утро внимательности не прибавило, а писал навскидку. Вот так должно работать:

set @i =1, @p=1;

SELECT @i FROM (SELECT id FROM users ORDER BY rating DESC, id DESC) t WHERE @p AND IF
(id=".$USER['id'].",(@p:=0) or 1,@i:=@i+1) order by @i desc limit 1;

Неактивен

 

#5 13.09.2009 23:26:42

Gefest
Участник
Зарегистрирован: 12.07.2009
Сообщений: 6

Re: Помогите с условием

vasya, большое спасибо, теперь все работает!

Неактивен

 

#6 13.09.2009 23:31:32

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

Re: Помогите с условием

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

SELECT COUNT(u.id)+1 FROM users AS u WHERE u.rating > (SELECT rating FROM users WHERE id = '".$USER['id']."')
 OR (
u.rating = (SELECT rating FROM users WHERE id = '".$USER['id']."')  AND u.id > '".$USER['id']."'
)


или

SELECT COUNT(u.id)+1 FROM users AS u WHERE u.rating >= (SELECT rating FROM users WHERE id = '".$USER['id']."')
 and
if(u.rating=(SELECT rating FROM users WHERE id = '".$USER['id']."'),if(u.id > '".$USER['id']."',1,0),1);
 

Неактивен

 

Board footer

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