Позиция в выборке

Vin-Diesel

Новичок
Позиция в выборке

Нужно определить позицию в выборке.
Скажем есть таблица
id_user|date
1|18.10.2010
2|17.10.2010
3|19.10.2010
4|15.09.2010

Нужно определить позицию пользователя №2, при сортировке по убыванию, по полю date, т.е. в результате получаем:
position
3

как это реализовать?

-~{}~ 18.10.10 19:23:

А все! Нашел
[SQL]
SET @pos := 0;
SELECT @pos := @pos + 1 AS 'position' FROM `table` WHERE `id_user` = 2 GROUP BY `id_user` ORDER BY `date` DESC;
[/SQL]
 

zerkms

TDD infected
Команда форума
и неужели работает? )))

такие вещи нужно делать COUNT'ом
 

zerkms

TDD infected
Команда форума
BRat
и с какой стати оно бы работало?

после "WHERE `id_user` = 2" у тебя в выборке останется одна запись и для неё @pos всегда будет считаться как 1

-~{}~ 19.10.10 09:10:

Код:
mysql> SET @pos := 0;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @pos := @pos + 1 AS 'position', id
    -> FROM `refs`
    -> WHERE `id` = 20
    -> GROUP BY `id`
    -> ORDER BY `added` DESC ;
+----------+----+
| position | id |
+----------+----+
|        1 | 20 |
+----------+----+
1 row in set (0.03 sec)
не знаю как оно у вас там может работать - лично у меня оно ожидаемо выдаёт всегда 1.
 

Vin-Diesel

Новичок
Да действительно не работает, эт пример просто)

-~{}~ 20.10.10 15:41:

В моем случае получилось чуть больше, т.к. в таблице могут быть записи с одинаковыми id, но разными датами, т.е. так:
id_user|date
1|18.10.2010
2|17.10.2010
3|19.10.2010
4|15.09.2010
2|20.10.2010
Сделал через два вложенных запроса, может у кого будут другие идеи?
Первый такой:
SELECT `id_user`, MAX(`date`) FROM `table` GROUP BY `id_user`;
после пронумеровываем все записи:
SELECT `id_user`, @pos := @pos + 1 as 'position' FROM (первый запрос) AS ulp ORDER BY `date` DESC;
и после извлекаем нужного пользователя:
SELECT `position` FROM (второй запрос) AS up WHERE up.`id_user` = 2
 

sverel

Новичок
SELECT `date` FROM `table` WHERE `user_id`=38;
SELECT COUNT(*) FROM `table` WHERE `date` > 2010-10-15

Находим кол-во юзеров, у которых дата меньше чем у интересующего нас юзера. Т.е. кол-во тех кто будет стоять перед нашим юзером во время выборке с ORDER BY `date` DESC. Не забудьте, что у нескольких юзеров может быть одинаковая дата.
Ну и формат даты у Вас странный. Вы уверены что ORDER BY `date` работает правильно? Возможно, то что он работает правильно - это только совпадение?
 

Vin-Diesel

Новичок
Да правильно работает, это я писал по привычке)
Я понял идею, спасибо)
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ниче, что теме уже больше года? :D
 

sverel

Новичок
> Тема в разделе 'PHP и базы данных', создана пользователем Vin-Diesel, 18/10/10.
а сейчас уже 2011-ый? Ничего себе, меня вырубило...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
sverel
Выдыхай, ежик, выдыхай.
 
Сверху