查找Magento2订单销量MySQL字段值序列化办法
我们在Magento 2中进行数据库查询最近一个月的销量的时候,我们需要的是安装sku的下拉选项进行查找,既是看看今年那个产品卖得最好,销售的最好。那么我们如何做呢?
首先我们要打开Magento 2的数据库找到表sales_order_item,这里面有sku,item,product_options,name等等其他的一些数据。
我们首先使用下面的sql语句查询当年的销量情况,例如要查询的是sku为WJ06-的这个产品,前段页面显示的下拉选项在product_options字段里面的option_value 的值,记住这个是序列化存储在数据库中的。所以我们要得出这个值,需要提取到这个option_value的值。
例如我们通过下面的语句可以查看:
SELECT a.increment_id,b.product_options,b.sku,b.qty_ordered,b.created_at FROM sales_order a JOIN sales_order_item b ON a.entity_id = b.order_id AND b.parent_item_id IS NULL WHERE b.sku LIKE '%wj06-%' AND b.created_at > '2019-01-01';
输出如下:
上图我们只截取了部分数据,那么这只是销量sku为WJ06的产品,那么下拉框选项还是没有找到。别急这个选项在product_options,我们看看上图方框框的那个完整的数据,如下所示:
{"info_buyRequest":{"qty":1,"super_attribute":{"136":"167","93":"50"},"options":[]},
"attributes_info":[{"label":"Size","value":"XS","option_id":136,"option_value":"167"},
{"label":"Color","value":"Blue","option_id":93,"option_value":"50"}],"simple_name":
"Minerva LumaTech™ V-Tee-XS-Blue","simple_sku":"WS08-XS-Blue","product_calculations":
1,"shipment_type":0}
通过上面我们可以看到option_value的值为50,那么50对应的下拉数据是什么呢,这就要另一个表catalog_product_option_type_title 其中50的值为catalog_product_option_type_title的option_type_id 值所相等。那么这个行的titie 字段既是这个下拉选项。
获取得到option_value
我们要使用mysql的SUBSTRING_INDEX
SELECT a.increment_id,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(b.product_options,'option_value":"',-1),'"',1) AS SIGNED) AS VALUE ,b.sku,b.qty_ordered,b.created_at FROM sales_order a JOIN sales_order_item b ON a.entity_id = b.order_id AND b.parent_item_id IS NULL WHERE b.sku LIKE '%wj06-%' AND b.created_at > '2019-01-01'
得到的结果:
下面我们和关联表catalog_product_option_type_title如下:
SELECT gg.*,ff.title FROM
(
SELECT a.increment_id,a.store_id,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(b.product_options,'option_value":"',-1),'"',1) AS SIGNED) AS VALUE ,b.sku,b.qty_ordered,b.created_at FROM sales_order a JOIN sales_order_item b ON a.entity_id = b.order_id AND b.parent_item_id IS NULL WHERE b.sku LIKE '%wj06-%' AND b.created_at > '2019-01-01'
)
AS gg
JOIN catalog_product_option_type_title ff ON ff.option_type_id= gg.VALUE AND gg.store_id = ff.store_id ORDER BY gg.increment_id DESC
执行后完美解决,数据库字段序列化。