Как правильно перебрать массив и вывести результат?
Делаю для WooCommerce кастомную таблицу продаж.
Задача, показать количество продаж определенного товара за месяц для каждой страны.
В итоге таблица будет выглядеть так:
Странна\Товар_|_Товар А_|_Товар Б_|_Товар В_|_Товар Г
-------------------------------------------------------------------
Страна №1_____|___1______|__0______|__1________|__0
Страна №2_____|___0______|__2______|__1________|__0
Уже есть массив заказов (свой запрос в БД), приходит в таком виде: $order {дата заказа, id заказа, название товара, страна доставки} - только те данные, которые нужны для таблицы.
Дальше перебираю массив заказов и формирую результаты, для каждого товара if товар == такой-то && if страна доставка == такая {$tovat_1_strana_1++}.
И дальше собираю массив результатов и во фронте в нужном месте таблицы просто вывожу результат в таблицу.
Понимаю что бред писать 150 запросов, можно же как-то оптимизировать все, но как правильно перебрать массив, чтобы:
а) показать (добавить в массив результата) только те странны, в которые уже оформлен заказ (массив доступных стран есть)
б) не писать 150 if'ов отдельно для каждого товара и для каждой страны (всего 5 товаров и 30 стран).
Запрос будет типа:
select country, item_id,count(id) from orders where 1 (ваше условие по выборке) group by country, item_id;
В итоге получится ответ:
кол-во страна1 товар1
кол-во страна2 товар1
и тд... а дальше уже на php выводите как вам необходимо все. При необходимости сразу тут же подставляйте left join для вывода названия товара или названия страны.
спасибо за ответ, только я все равно не понял как выполнить свою задачу.
мне то нужно посчитать количество для каждого товара отдельно, значит будет отдельный запрос для каждого товара ?
aarty20: зачем вам нужен каждый запрос для отдельного товара.
Представьте, у вас вырастет база, и будет овер много товаров и стран.
И что, будете делать по 1К запросов на базу? Я обычно исправляю такое после программистов, которые не могут собрать данные за 1 запрос на базу.
Если вы отправите прямой запрос, с двойным group by и агрегатной функцией, вы получите сравнительно быстрый запрос , который будет работать при масштабировании намного шустрее.
Вопрос в чем - спроецировать запрос на ваш проект?
- заплатите рублей 300-500 на фрилансе, и вам соберут запрос. а вы потратите время на более полезные дела.
или разобраться с пришедшими данными?
переберите в нужный вам массив и выведите данные как желает клиент.
aarty20: документация откройте по count() , group by.
Здесь отвечают люди, когда у них есть свободное время, и когда вопрос поставлен со всем данными. Увы, у вас нет данных по связям в таблице и структуре таблицы. Поэтому я написал запрос, как это должно выглядеть. а вы уже почитайте документацию и спроектируйте на себя.