Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mysql определение места записи из другого запроса, определить место ставки в аукционе 
V
    Опции темы
shevak
  Дата 4.4.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: 1
Всего: 1



 Добрый всем день.
Никак не получается сделать одну фишку.

есть таблицы: аукцион, пользователь и ставки.
таблица auctions:
- id
- name
- description

users:
- id
- name
- login

rates (ставки):
- id
- auction_id
- user_id
- rate
- status

Ставки могут быть сгоревшими и нет.
Место ставки определяется путем выстраивания не сгоревших ставок по порядку

Код

SELECT r.*, u.login FROM rates as r LEFT JOIN users as u ON u.id=r.user_id WHERE r.auction_id=$auction_id ORDER BY status,sum DESC


Все хорошо и замечательно. Только теперь надо бы вытащить ставки пользователя, а также места этих ставок в общем списке.

До этого такая задача стояла для единичной ставки. Удалось решить следующим способом:
Код

SET @n:=0, @found:=0;
SELECT IF(@found = 1 OR id=".$lastId.", @found:=1, @n:=@n+1) FROM rates WHERE auction_id=$auction_id AND status=1 ORDER BY sum DESC SELECT @n AS num

Был даже от кого-то совет - посчитать сумму элементов до заданного и прибавить 1. Но это опять же место одной ставки

Подумывал еще добавить параметр места ставки в БД. но понятно, что это бессмысленно, т.к. при добавлении одной ставки придется переписывать все предыдущие. А их может быть 5-10 тыс.

Подскажите плиз, что тут мона придумать 

Что было понятней, приведу еще такой пример:
таблица rates:
id auction_id user_id rate status
1 5 4 99 0
2 5 3 81 0
3 5 4 80 0
4 5 3 97 0
5 5 4 99 1
6 5 4 98 0
7 5 3 99 1
8 5 4 99 1
9 5 4 85 0

После выборки получится такие данные:
№п/п r.id auction_id user_id rate status
1 1 5 4 99 0
2 6 5 4 98 0
3 4 5 3 97 0
4 9 5 4 85 0
5 2 5 3 81 0
6 3 5 4 80 0

Надо придумать запрос, который выводил бы следующее (для user_id=3):
№п/п r.id auction_id user_id rate status
3 4 5 3 97 0
5 2 5 3 81 0


PM MAIL   Вверх
shevak
Дата 8.4.2009, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: 1
Всего: 1



Никаких предложений не будет? хоть что-то? может как-то БД подправить, чтоб такое выводить возможно было?
PM MAIL   Вверх
skyboy
Дата 8.4.2009, 23:37 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



слишком много букв.
если бы нашел более простую аналогию, а то вот лично я читал-читал, но так и не представил все связи.
PM MAIL   Вверх
shevak
Дата 9.4.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: 1
Всего: 1



ну как смог, так и объяснил, старался подробней
PM MAIL   Вверх
shevak
Дата 9.4.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 12.8.2008

Репутация: 1
Всего: 1



решилась проблема, вот каким запросом:
Код

SELECT r1.*, u.login, COUNT(r2.id)+1 as `position`
FROM `rates` as `r1` 
    INNER JOIN `users` as `u` ON (u.id = r1.user_id) 
    LEFT JOIN rates as `r2` ON (r2.sum > r1.sum AND r2.status = 0 AND r2.auction_id = $auction_id)
WHERE r1.status = 0 AND r1.auction_id = $auction_id AND u.id = $user_id
GROUP BY r1.id
ORDER BY r1.status, r1.sum DESC


всем спасибо

Добавлено через 5 минут и 8 секунд
тема закрыта
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.