[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как такое сделать?
Va18eJd
У меня есть таблица:

create table tablename(
id int primary key auto_increment,
user_id int NOT NULL,
bid int NOT NULL
)

В эту таблицу пользователи заносят свои ставки. Причем каждый пользователь может сделать несколько записей в таблицу. Мне нужно каким-то образом узнать какая по счету из всех последних ставок пользователей - последняя ставка от выбранного пользователя.
А теперь по русски smile.gif :
Первый поставил 140 потом 200
второй 300
третий 180 потом 400 и 700
Например, мне нужно получить значения для первого, результат должен быть:
3-е место

Подскажите, как такое сделать?



Спустя 40 минут, 45 секунд (23.07.2010 - 14:34) sergeiss написал(а):
Цитата (Va18eJd @ 23.07.2010 - 14:53)
Мне нужно каким-то образом узнать какая по счету из всех последних ставок пользователей - последняя ставка от выбранного пользователя.

По айди ставок, сделанных этим пользователем. Ведь сколько бы он их ни сделал, у последней будет максимальный айди.

Спустя 9 минут, 45 секунд (23.07.2010 - 14:44) Va18eJd написал(а):
это да, я понимаю, а вот как получить номер позиции по отношению к ставкам других пользователей?

Спустя 2 минуты, 29 секунд (23.07.2010 - 14:46) sergeiss написал(а):
Цитата (Va18eJd @ 23.07.2010 - 15:44)
а вот как получить номер позиции по отношению к ставкам других пользователей?

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

Или ты "намякиваешь" код написать??? wink.gif

Спустя 35 минут, 57 секунд (23.07.2010 - 15:22) Va18eJd написал(а):
ну вот так я могу получить максимальные ставки:

$results = $DB->Query("SELECT * FROM (SELECT * FROM w_users_bids_num ORDER BY id DESC) as t WHERE 1 GROUP BY user_id ORDER by id DESC");
while ($row=$results->Fetch())
{
echo '<pre>';
print_r($row);
echo '</pre>';
}

а как теперь получить номер позиции?

Спустя 6 минут, 20 секунд (23.07.2010 - 15:29) Michael написал(а):
Цитата (Va18eJd)
Первый поставил 140 потом 200
второй 300
третий 180 потом 400 и 700
Например, мне нужно получить значения для первого, результат должен быть:
3-е место

а почему для 1-ого должно быть не 5-е место?
140 -1-й
200 -1-й
300 -2-й
180 -3-й
400 -3-й
700 -3-й

Спустя 2 минуты, 22 секунды (23.07.2010 - 15:31) Va18eJd написал(а):
потому, что у одного пользователя можно взять одну ставку.
у третьего - самая большая - 700
у второго вторая - 300
у первого третья - 200

Спустя 31 минута, 28 секунд (23.07.2010 - 16:02) sergeiss написал(а):
Как это сделать в Постгре, я знаю... А вот как сделать в "дефолт БД" - ХЗ. Потому что у "дефолт БД" есть специфика своя, связанная с группировкой.

Спустя 3 минуты (23.07.2010 - 16:05) Va18eJd написал(а):
печально. ну а хоть куда копать стоит?

Спустя 14 минут, 21 секунда (23.07.2010 - 16:20) sergeiss написал(а):
Цитата (Va18eJd @ 23.07.2010 - 17:05)
ну а хоть куда копать стоит?


Я уже говорил:
Цитата (sergeiss @ 23.07.2010 - 15:46)
Сначала выбираем строки, у которых максимальные айди по каждому пользователю, а потом сортируем по величине ставки. И выводим пользователей.


Спустя 12 минут, 40 секунд (23.07.2010 - 16:33) Va18eJd написал(а):
Понятно.
эм..а никто больше кодом не поможет? smile.gif или более четкой наводкой?

Спустя 14 минут, 38 секунд (23.07.2010 - 16:47) Ice написал(а):
Цитата (Va18eJd @ 23.07.2010 - 16:22)
а как теперь получить номер позиции?

что выведет этот листинг?


$results = $DB->Query("SELECT * FROM (SELECT * FROM w_users_bids_num ORDER BY id DESC) as t WHERE 1 GROUP BY user_id ORDER by id DESC");
while ($row=$results->Fetch())
{
echo '<pre>';
print_r($row);
echo '</pre>';
}


Прямо в РНР и получить номер позиции, задав инкрементируЮщуЮся переменную.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.