Цену нужно хранить в оригинальной цене ("цена каталога" поставщика). В любой системе изменения, которой ее хранит поставщик товара. + Завести тип цены (тип поставки).
Далее есть формула, которая пару "ориг. цена + тип поставки" конвертирует туда, куда надо: закупочная, для оптовиков (+их коэф.), розничная, гостевая (для клиентов оптовиков). В формуле хранятся в зависимости от поставщика товара множество коэффициентов:
- наша скидка по каталогу
- базовая маржа
- наценка для конкретного оптовика (зависит от оборота)
- гостевая наценка оптовика для своих клиентов
- курсы валют
- группы скидок товара (discount group)
- скидка на стоимость (чем дороже товар, тем меньше наша маржа)
- скидка на объем заказа
- лежит ли товар уже на нашем мертвом складе, какой срок
- лежит ли товар в "Спец. цены" (особая фиксированная цена по акции)
и т.д.
Вышеозвученный детский сад "как хранить" - не серьезен. Есть только цена по каталогу + тип поставки, цена прихода товара на склад (всегда в рублях), первоначальная цена в заказе клиента, конечная цена отгрузки клиенту, первоначальная цена у поставщика.
Для сортировки применяем кеш от цен, вычисленной формулами. Но смысла в сортировке цен НЕТ. Нахера сортировать разные товары между собой по цене? Никакого. Сортировать имеет только разные цены на один и тот же товар от разных поставщиков, чтобы клиент мог выбрать нечто не очень дорогое и наиболее быстро поставляемое. Но в этом случае нужно отсортировать парочку цен (ну, 50 позиций с выбором). С этим справится пхп и asort() при показе.