Добавляете в таблицу поле `sold`, по умолчанию 0.
В цикле выдаёте запросы:
UPDATE `table` SET `sold` = 1 WHERE `sold` = 0 AND `price` <= {$maxprice} AND @id := `id`;
SELECT * FROM `table` WHERE `id` = @id;
Первый запрос установит признак "продано" и запишет id строки в переменную, второй получит изменённую строку. Затем определяете объём покупки (минимальное из объёма лота и остатка желаемого количества), переводите оплату. Если лот продан полностью, а заявка ещё не выполнена, то повторяете цикл, если нет - то уменьшаете объём лота и сбрасываете признак `sold` в 0.