Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Выборка товаров по сумме цен
BloodSeeker  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 1
Пользователь №: 42449
На форуме: 10 месяцев, 9 дней
Карма:




Товарищи, в 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()
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 17 дней
Карма: 167




SQL это декларативный язык, а стоящая задача для процедурного языка. Для решения подобной задачи на уровне СУРБД, необходимо использовать процедуры.


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1755
Пользователь №: 20757
На форуме: 6 лет, 10 месяцев, 5 дней
Карма: 184




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

100000 - это бюджет, в него надо уместить товары
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 8 дней
Карма: 77




kaww
как интересно. Не знал спасибо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 17 дней
Карма: 167




Kusss, интересно, но толком не решает поставленную задачу

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

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

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


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1755
Пользователь №: 20757
На форуме: 6 лет, 10 месяцев, 5 дней
Карма: 184




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

Да, запрос "споткнется" на втором товаре и не вернет остальные, хотя они удовлетворяют условию.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 17 дней
Карма: 167




Цитата (kaww @ 28.01.2016 - 11:15)
что запрос вернет не больше чем единицу каждого товара

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

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


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса