Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Может быть делал кто нибудь сортировку по популярности?

Представляю ее как список товаров от самых покупаемых к менее покупаемым на основе заказов с типом "Выполнены" или "Новые", исключая "Удаленные"

 

Самому сделать не проблема, я просто думал может если кто делал и не жалко, поделится запросиком, мне больше не надо :)

Ссылка на сообщение
Поделиться на другие сайты

Ответов не было, неужели никто не делал?

 

В общем попробовал накалякать запрос, которые будет подсчитывать кол-во проданного товара по следующим условиям:

1. Считаем только "Выполненные" заказы

2. Если в заказе несколько вариантов данного товара, считаем как одну продажу

 

Вроде все. Я попробовал "на лету" считать и выдавать результат, запрос работает около 0,4 сек, при наличии в s_purchases порядка 130к записей. Результат не устроил. решено было писать bash:

 

#!/bin/bash
mysql -u dbuser -pdbpassword << EOF
use dbname;
UPDATE s_products t SET t.buyable = (SELECT count(p.product_id) as cnt
FROM (select distinct s.product_id, s.order_id from s_purchases s) p, s_orders o
WHERE p.order_id=o.id
AND o.status=2
AND p.product_id = t.id
GROUP BY p.product_id);
EOF

 

Попутно добавил новое поле buyable в таблицу s_products и создал на него индекс

 

Скрипт засунул в cron на запуск каждые 3 часа - я думаю такой периодичности достаточно для обновления популярности товара. У кого продажи идут каждые 5 минут :) могут сделать почаще!

 

Далее правим api/Products.php, в функции get_products ищем запрос в переменной $query и добавляем в SELECT наше поле p.buyable

Чуть выше, в область switch ($filter['sort']) добавляем:

case 'buyable': // сортировка по покупаемости
$order = 'p.buyable DESC';
break;

В шаблоне, где у вас варианты сортировки, добавляем:

<a {if $sort=='buyable'}  class="selected bold"{/if} href="{url sort=buyable page=null}">популярности</a>

Вроде все, теперь пользователи могут видеть, что покупается чаще всего!

 

Прошу перенести в Готовые решения

Ссылка на сообщение
Поделиться на другие сайты

kors

О, спасибо! Это правда более правильное решение. Единственное, нужно учесть то, что в одном заказе может быть два варианта одного и того же товара, когда будешь перебирать покупки из заказа. По хорошему, там же в Orders.php можно накалякать новую функцию, которая будет возвращаться только product_id из заказа, без учета вариантов, перебирать их и делать апдейт того же buyable.

В любом случае, мой код пригодится для единовременно заполнения таблицы данными в buyable

 

А когда наступает эти события, вызывающие close или open? Я предполагаю, что close наступает при статусе Выполнен или Удален. Но что будет, если мы выполненный заказ удалим? Получается, он будет играть роль в популярности товара, хотя и не должен! Но и удалять выполненный заказ тоже не правильно. 

И в моем варианте есть некий нюанс - если захотим почистить таблицу заказов, удалить старые, то после перерасчета, популярность поменяется.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Программисты? )

К чему проверять каждые 5 минут )

опытному магазину (не открывшемуся неделю назад) достаточно делать сканирование заказов раз в неделю.

Ссылка на сообщение
Поделиться на другие сайты
  • 3 года спустя...

При сортировке по покупаемости если в заказах например было всего 10 товаров (грубо говоря, по всем заказам в разделе выполненные) эти 10 товаров встают начала списка в категории, а после товары выстраиваются либо по id либо по created - не понятно. Причем первыми показываются самые старые товары. Подскажите пожалуйста как сделать напорот, чтобы после покупаемых товаров, товары были отсортированы например по id по убыванию, т.е. чтобы новые товары стояли впереди.

Ссылка на сообщение
Поделиться на другие сайты
  • 2 года спустя...

Добрый день!

Подскажите а как можно чтобы учитывались не все заказы, а только за последний месяц?

Я так понимаю необходимо написать что-то вроде 

AND o.date= DATE - 30 DAY

 

но это не работает. Подскажите пожалуйста.

Ссылка на сообщение
Поделиться на другие сайты

Все разобрался, спасибо Вам большое (в тестовой базе делал, в ней не было заказов за 30 дней, чтобы сортировать)!

Ссылка на сообщение
Поделиться на другие сайты
  • 9 месяцев спустя...

Пытаюсь через cron впихнуть запрос в БД php-файлом, прошу помощи, что не так:
 

<?php
$link = mysqli_connect("адресБД", "логин", "пароль", "имяБД");

$sql = "UPDATE s_products t SET t.buyable = (SELECT count(p.product_id) as cnt
FROM (select distinct s.product_id, s.order_id from s_purchases s) p, s_orders o
WHERE p.order_id=o.id
AND o.status=2
AND p.product_id = t.id
GROUP BY p.product_id)";

mysqli_close($link);
?>

Суппорт говорит неверно пишу запрос в пхп

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...