id|name|wh_id|active 1 | A | 1 | 1 2 | B | 2 | 1
id|name|active 1 | G1 | 1 2 | G2 | 1 3 | G3 | 1 4 | G4 | 1 5 | G5 | 1
id|wh_id|product_id|count 1 | 1 | 1 | 10 2 | 2 | 2 | 10 3 | 1 | 3 | 10 4 | 2 | 3 | 10 5 | 2 | 5 | 10 6 | 1 | 5 | 10
Товар | A | B G1 | 10| 0 G2 | 0 | 10 G3 | 10| 10 G4 | 0 | 0 G5 | 10| 10
array( [0] => array( "product" => G1, "data" => array( [0] => array( "shop" => "A", "count" => 10 ) ) ) )
SELECT N.id, N.name, CONCAT( "[", GROUP_CONCAT( CONCAT("{shop:'",CONVERT(S.name USING utf8),"',"), CONCAT("count:'",CONVERT(P.count USING utf8),"'}") ) ,"]" ) as data FROM `modx_products_nomenclature` N LEFT JOIN `modx_shops` S ON S.active = 1 LEFT JOIN `modx_warehouse_products` P ON P.product_id = N.id and S.warehouse_id = P.warehouse_id GROUP BY N.id
id 1 name G1 data [{shop:'A', count:'10'}] ..... id 3 name G1 data [{shop:'A', count:'10'}, {shop:'B', count:'10'}]
SELECT N.id, N.name, CONCAT( "[", GROUP_CONCAT( CONCAT("{shop:'",CONVERT(S.name USING utf8),"',"), CONCAT("count:'", if(P.count > 0, CONVERT(P.count USING utf8), 0),"'}") ) ,"]" ) as data FROM `modx_products_nomenclature` N LEFT JOIN `modx_shops` S ON S.active = 1 LEFT JOIN `modx_warehouse_products` P ON P.product_id = N.id and S.warehouse_id = P.warehouse_id GROUP BY N.id
CONCAT("count:'", CONVERT(IFNULL(P.count, 0) USING utf8),"'}")
$q = $modx->newQuery('ProductsNomenclature'); $q->select( array( "`ProductsNomenclature`.`name` as product", "`ProductsNomenclature`.`code` as code", "`ProductsGroup`.`name` as groupname", "CONCAT('[', GROUP_CONCAT( CONCAT('{\"shop\":\"',`Shop`.`name`,'\",'), CONCAT('\"count\":', IFNULL(`WarehouseProducts`.`count`, 0),','), CONCAT('\"unit\":\"', `ProductsNomenclature`.`unit_measure`,'\"}') ) ,']') as data", ) ); $q->innerJoin('Shops', 'Shop', '`Shop`.`active` = 1'); $q->innerJoin('ProductsGroup', 'ProductsGroup', '`ProductsGroup`.`id` = `ProductsNomenclature`.`group_id`'); $q->leftJoin('WarehouseProducts', 'WarehouseProducts', '`Shop`.`warehouse_id` = `WarehouseProducts`.`warehouse_id` and `ProductsNomenclature`.`id` = `WarehouseProducts`.`product_id`'); $q->where( array( 'active' => 1, ) ); $q->sortby('`ProductsNomenclature`.`group_id`', 'ASC'); $q->groupby('`ProductsNomenclature`.`id`');
// ошибка [6] => Array ( [product] => ХХХ [code] => ХХХ [groupname] => ХХХ [data] => [{"shop":"Магазин1","count":0,"unit":"шт."},{"shop":"Магазин2","count":50000,"unit":"шт."},{"shop":"Магазин3","count":50000,"unit":"шт."},{"shop":"Магазин4","count":50000,"unit":"шт."},{"shop":"Магазин5","count":50000,"unit":"шт."},{"shop":"Магазин6","count":50000,"unit":"шт."},{"shop":"Магазин7","count":] ) //а вот тут все хорошо [9] => Array ( [product] => ХХХ [code] => ХХХ [groupname] => ХХХ [data] => [{"shop":"Магазин3","count":50000,"unit":"шт."},{"shop":"Магазин4","count":50000,"unit":"шт."},{"shop":"Магазин5","count":50000,"unit":"шт."},{"shop":"Магазин6","count":50000,"unit":"шт."},{"shop":"Магазин7","count":0,"unit":"шт."},{"shop":"Магазин1","count":0,"unit":"шт."},{"shop":"Магазин2","count":5000] )
SET SESSION group_concat_max_len = 100000;
select product_id, shop_id, count(*) as total from products p inner join shop_products sp on sp.product_id = p.id inner join shops s on sp.shop_id = s group by product_id, shop_id