create table tablename(
id int primary key auto_increment,
user_id int NOT NULL,
bid int NOT NULL
)
В эту таблицу пользователи заносят свои ставки. Причем каждый пользователь может сделать несколько записей в таблицу. Мне нужно каким-то образом узнать какая по счету из всех последних ставок пользователей - последняя ставка от выбранного пользователя.
А теперь по русски

Первый поставил 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) |
а вот как получить номер позиции по отношению к ставкам других пользователей? |
Ну дык, ёпрст... Сначала выбираем строки, у которых максимальные айди по каждому пользователю, а потом сортируем по величине ставки. И выводим пользователей.
Или ты "намякиваешь" код написать???

Спустя 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
у третьего - самая большая - 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 написал(а):
Понятно.
эм..а никто больше кодом не поможет?
или более четкой наводкой?
эм..а никто больше кодом не поможет?

Спустя 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>';
}
Прямо в РНР и получить номер позиции, задав инкрементируЮщуЮся переменную.