[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка товаров по сумме цен
BloodSeeker
Товарищи, в sql разбираюсь поверхностно, можете подсказать, есть ли возможность выбрать из БД столько элементов, чтобы сумма по их полю цена не превысила заданное значение? Сама задача не стоит как для метода оптимизации - найти максимально близкую сумму к заданной, просто выбирать рандомные значения, пока не превысит заданную сумму
Вот сам запрос без ограничения на количество товаров:

SELECT el.ID, el.NAME, el.DETAIL_PICTURE, price.PRICE, prod.QUANTITY
FROM b_catalog_product AS prod, b_catalog_price AS price, b_iblock_element AS el
WHERE el.IBLOCK_ID = "6" AND
el.ACTIVE = "Y" AND
prod.QUANTITY > "1" AND
price.PRICE >= '. $_POST['MINPRICE'] .' AND price.PRICE <= ' . $_POST['MAXPRICE'] . ' AND
el.ID = prod.ID AND
el.ID = price.ID AND
prod.ID = price.ID
ORDER BY RAND()
Valick
SQL это декларативный язык, а стоящая задача для процедурного языка. Для решения подобной задачи на уровне СУРБД, необходимо использовать процедуры.

_____________
Стимулятор ~yoomoney - 41001303250491
kaww
BloodSeeker, не стал разбираться в схеме по вашему запросу, вот решение в общем виде, которое должно подойти:
select * from products, (select @price := 0) as _p
where (@price := @price + products.price) < 100000

100000 - это бюджет, в него надо уместить товары
Kusss
kaww
как интересно. Не знал спасибо.
Valick
Kusss, интересно, но толком не решает поставленную задачу

например бюджет 100 тыс

1 продукт 55 тыс
2 продукт 50 тыс
3 продукт 20 тыс
4 продукт 27 тыс
5 продукт 3 тыс
6 продукт 10 тыс

вопрос, что выдаст запрос?

_____________
Стимулятор ~yoomoney - 41001303250491
kaww
Valick, если ты имеешь ввиду то, что нет случайного порядка, то я намеренно сделал так.
Думал, что этот вопрос задаст ТС, если сам не догадается. Решение - это суб запрос.
Еще стоит учесть, что запрос вернет не больше чем единицу каждого товара, т.е. бюджет не будет выбран одинаковыми позициями если уникальных не хватит. В этом случае задача заметно усложняется т.к. придется как минимум учитывать количество товара в наличии.
Цитата (Valick @ 28.01.2016 - 07:44)
вопрос, что выдаст запрос?

Да, запрос "споткнется" на втором товаре и не вернет остальные, хотя они удовлетворяют условию.
Valick
Цитата (kaww @ 28.01.2016 - 11:15)
что запрос вернет не больше чем единицу каждого товара

тоже верное замечание
например в интерактивную собачку надо 4 батарейки АА, поэтому я сразу сказал, что тут нужна хранимая процедура, слишком много ветвлений логики.

ну и подзапрос с ORDER BY RAND() не самый лучший вариант, да и одного случайного порядка мало

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

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