@Kirill-Gorelov
С ума с IT

Битрикс, скидки для разных пользователей + сортировка?

Привет.

Нужно сделать несколько вариантов скидок для разных групп пользователей.
Чисто теоретический, они готовы, но возникает проблема.

Нужно сортировать товары по цене со скидкой.
Сейчас работает так: создал новое свойство(числовое), и туда записываю итоговую цену со скидкой.
И уже по нему сортирует. Но теперь вопрос. Как сделать, если у меня становится несколько групп?
Не создавать на каждую группу новое свойство и по нему сортировать?
  • Вопрос задан
  • 367 просмотров
Пригласить эксперта
Ответы на вопрос 1
Так как мы ничего не дождались, вот мой ответ:

Так как скидки вычисляются в рантайме PHP, вы никак не можете упорядочить товары по цене со скидкой в запросе и сортировку необходимо выполнять ПОСЛЕ того как вычислена цена скидки.

Хуже того то, что вам для формирования каждой страницы придется извлечь ВСЕ товары, вычилсить цену со скидкой для ВСЕХ товаров, отсортировать массив в рантайме и выбрать из него товары для страницы.

Это очень дорогая операция которую никак не возможно обойти. Всё будет неплохо, пока у вас не много товаров или очень редкие изменения в них, но как только товаров станет много - все эти ваши расчеты положат сервер выжирая всю память и процессор.

Следовательно нам нужен кэш. И было неплохо этот кэш сделать максимально узким чтобы как можно реже его обновлять. А лучше вычислять прямо при добавлении нового товара и желательно только для него.

Что хранить в этом кэше? Выходит только что предвычисленные цены со скидкой...

И вот мы вернулись ровно сюда:
Как сделать, если у меня становится несколько групп?
Не создавать на каждую группу новое свойство и по нему сортировать?

Именно так и делать. Если групп относительно не много. Скажем до 2-3х десятков такое решение все равно будет оптимальным и самым быстрым.

Обновление значений вешайте на апдейт товара/элемента на события.

Если групп много - делайте то же самое но заводите отдельну таблицу и делайте джойны при выборке.
И сравнивайте скорость работы обоих решений - с определенного момента при росте свойств второе станет чуть быстрее мне кажется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы