У меня проблема с формированием массива данных.
1. Есть интернет магазин;
2. Каталог с 2-х уровневой структурой категорий, каждая категория имеет свойство "скидка, %";
3. Товары в категориях, у товара есть свойства "цена", "специальная цена", "скидка, %", "валюта".
4. На сайте есть сортировка по стоимости товара + фильтр по стоимости.
Как вы понимаете чтобы получить текущую стоимость товара надо учитывать все выше приведённые факторы, т.е. наличие скидки в категории 1-ого уровня потом в категории 2-ого уровня потом скидки у самого товара далее наличие специальной цены и при всё при этом ещё пересчитать стоимость в рублях с учётом валюты.
На данный момент начал реализацию этого при помощи введения доп. поля curprice у каждого товара и пересчёт идёт как при добавлении товара так и при изменении курса валюты или изменениях скидок в категориях, получается как-то запутанно.
Может стоит формировать массив товаров на php и уже в нём делать все расчёты и потом работать с ним а не непосредственно с БД?
Или ещё как-нибудь?
Что скажите, какие идеи?
Спустя 1 час, 5 минут, 7 секунд (4.11.2010 - 19:25) Guest написал(а):
Ну если в базе не десятки тысяч наименований, то почему бы не формировать цену при выборке данных ?
ЕСЛИ(спец.цена, спец.цена, цена) * скидка1 * скидка2 * валюта КАК реальная_цена
и сортировать и фильтровать по "реальной_цене" разумеется
ЕСЛИ(спец.цена, спец.цена, цена) * скидка1 * скидка2 * валюта КАК реальная_цена
и сортировать и фильтровать по "реальной_цене" разумеется
Спустя 12 минут, 46 секунд (4.11.2010 - 19:38) sergeiss написал(а):
Лучше, чтобы в БД всё было сделано. Потому что как только часть логики сажаем в БД, а часть в скрипт, то тут же получаем "грабли". На которые потом встанем. Обязательно, причем

Спустя 7 минут, 39 секунд (4.11.2010 - 19:45) akruteckij написал(а):
БД MySQL.
Если совсем всё отдавать на откуп БД тогда наверно надо писать тригеры, не уверен что их поддерживает хостинг провайдер.
Так что наверно от скриптов не отделаться.
Если совсем всё отдавать на откуп БД тогда наверно надо писать тригеры, не уверен что их поддерживает хостинг провайдер.
Так что наверно от скриптов не отделаться.
Спустя 1 час, 7 минут, 24 секунды (4.11.2010 - 20:53) sergeiss написал(а):
Насчет триггеров не понял ничё... Зачем они тут?
Скорее всего, надо будет создать сколько-то вьюшек (VIEW) и в итоге сделать один запрос, возможно, 16-этажный. Но триггеры тут не вижу, где использовать можно.
Скорее всего, надо будет создать сколько-то вьюшек (VIEW) и в итоге сделать один запрос, возможно, 16-этажный. Но триггеры тут не вижу, где использовать можно.
Спустя 3 часа, 32 минуты, 14 секунд (5.11.2010 - 00:25) akruteckij написал(а):
Ну как вариант можно наверно завести служебную таблицу с текущей ценой в рублях и при изменении каких-либо данных влияющих на стоимость товара делать перерасчёт используя триггеры...
Спустя 19 минут, 15 секунд (5.11.2010 - 00:44) SlavaFr написал(а):
Если алгоритм подщета решаем в базе данных, то там его и надо решать.
Цитата (akruteckij @ 4.11.2010 - 15:20) |
На данный момент начал реализацию этого при помощи введения доп. поля curprice у каждого товара и пересчёт идёт как при добавлении товара так и при изменении курса валюты или изменениях скидок в категориях, получается как-то запутанно. |
Ткое делать можно, но только в том случае, если подщет нормальными запросами sql невозможен или подщет перегружает базу данных и слишком медленный. В любом случае если ты решил так делать, то сразу пиши такую документацию и коментарии в коде, в таблице и в поле, чтоб их и в темноте было видно. Решение при помощи тригера не очень хорошо, так как база зделана для хренения данных а sql для их извечения, дополнения и изменения. Тригер это запрятаная интеграция программной лигики в хранилище данных, именно там, где программной логики быть не должно.
Ну а теперь покажи полную структуру таблиц с описанием foreign key и индексов, а также опиши досконально алгоритм подсчета.
Не исключено, что все легко решается обычными оптимированными запросами