00:59 

Мохнорыл
маленькое щячло
Реализую такую штуку как аля автоставка на аукционе:
в бд есть таблица с записями - юзер, что_покупает, начальная цена, конечная цена, количество ставок.
При сабмите вызывается функция:
Вытаскиваем всю таблицу по айдишнику того что покупаем, все это засовываем в массив, и пошли - если этот пользователь сейчас не обладатель лота и текущая цена выше начальной и меньше конечной - отнимаем одну ставку у этого пользователя, пишим историю, увеличиваем цену. переходим к следующей строчке в таблице.
Так должно происходить пока не останется пользователь с самым большим количеством ставок. (но в историю надо обязательно записывать порядок(такой то юзер увеличил ставку, следом за ним еще один, потом опять он и тп)).

Как тут быть?
Уже написал несколько совершенно безумных вариантов, но что-то они мне совсем не нравятся - сильно много обращений к бд, должен быть какой-то более оптимальный метод. Хотелось бы услышать ваше мнение..

@темы: Точка зрения, Вопросы, Алгоритмы, PHP, MySQL

Комментарии
2009-11-05 в 17:20 

 
Т.е. автоматизированный аукцион а-ля молоток.ру?
Не очень понял про начальную и конечную цену.

2009-11-05 в 17:49 

Мохнорыл
маленькое щячло
аля автоставка на gagen.ru..

упс, про это забыл написать - первоначально пользователь еще выбирает в какой ценовой промежуток будут использоваться его автоставки

2009-11-05 в 17:57 

 
хм, не был там никогда.

ну... в любом случае, когда кто-то делает новую ставку, ситуация всегда следующая: есть лидер торгов, - человек, который предложил макс. конечную цену. у всех остальных эта цена - ниже и, соответственно, их ставки перебиты.

и возможны два варианта:

- введенная конечная сумма ниже конечной суммы лидера торгов, в этом случае поднимаем актуальную ставку лидера и отфутболиваем текущего пользователя (две записи в логи: текущий пользователь сделал ставку, лидер сделал ставку выше), либо
- введенная конечная сумма все же выше, тогда лидер меняется (одна запись в логи: текущий пользователь перебил ставку).

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

     

Сообщество PHP программистов

главная