有时候在Magento 2中进行数据库查询最近一个月的销量的时候,我们需要的是安装sku的下拉选项进行查找,既是看看今年那个产品卖得最好,销售的最好。那么我们如何做呢?
首先我们要打开Magento 2的数据库找到表sales_order_item
,这里面有sku,item,product_options,name等等其他的一些数据。
我们首先使用下面的sql语句查询当年的销量情况,例如要查询的是sku
为WJ06-
的这个产品,前段页面显示的下拉选项在product_options
字段里面的option_value
的值,记住这个是序列化存储在数据库中的。所以我们要得出这个值,需要提取到这个option_value
的值。
例如我们通过下面的语句可以查看:
1 | 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
,我们看看上图方框框的那个完整的数据,如下所示:
1 2 3 4 5 | {"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
1 | 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
如下:
1 2 3 4 5 6 | 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 |
执行后完美解决,数据库字段序列化。