简体   繁体   English

使用 SQL 查询从数据库中获取 WooCommerce 单一产品数据

[英]Get WooCommerce single products data from database with a SQL query

I am trying to get the raw data from the database for the woocommerce_single_product_summary in woocommerce.我正在尝试从woocommerce_single_product_summary中的 woocommerce_single_product_summary 的数据库中获取原始数据。 I need to use the data externally, but I cannot figure out how this is placed in the database, I can gather everything else I need with:我需要在外部使用数据,但我无法弄清楚它是如何放置在数据库中的,我可以收集我需要的所有其他内容:

SELECT product.ID as product_id, product.post_title as product_name, replace(product.post_content, '"', "'") as product_content, product_sku.meta_value as product_sku, product_price.meta_value as product_price, product_weight.meta_value as product_weight
FROM clk_692135435d_wp_posts as product
LEFT JOIN clk_692135435d_wp_postmeta as product_sku ON product.ID = product_sku.post_ID
LEFT JOIN clk_692135435d_wp_postmeta as product_price ON product.ID = product_price.post_ID
LEFT JOIN clk_692135435d_wp_postmeta as product_weight ON product.ID = product_weight.post_ID
LEFT JOIN clk_692135435d_wp_postmeta as product_desc ON product.ID = product_weight.post_ID
WHERE (product.post_type = 'product' OR product.post_type = 'product_variation') AND product_sku.meta_key = '_sku' AND product_price.meta_key = '_price' AND product_weight.meta_key = '_weight'
ORDER BY product_id ASC;

To get the correct desired meta keys from wp_postmeta table, you will have to look at wp_postmeta table in your database via phpMyAdmin for a given product Id (post_id).要从wp_postmeta表中获取正确的所需元键,您必须通过 phpMyAdmin 查看数据库中的wp_postmeta表以获得给定的产品 ID (post_id)。

Then you will better use this kind of lighter SQL query instead:那么你最好使用这种更轻量级的 SQL 查询:

SELECT p.`ID`       AS product_id,
   p.`post_title`   AS product_name,
   p.`post_excerpt` AS product_short_description,
   p.`post_content` AS product_description,

   Max(CASE WHEN pm.meta_key = '_sku'            AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_sku,
   Max(CASE WHEN pm.meta_key = '_price'          AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_price,
   Max(CASE WHEN pm.meta_key = '_stock_status'   AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_stock_status,
   Max(CASE WHEN pm.meta_key = '_stock'          AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_stock_qty,
   Max(CASE WHEN pm.meta_key = '_weight'         AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_weight,
   Max(CASE WHEN pm.meta_key = '_length'         AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_length,
   Max(CASE WHEN pm.meta_key = '_width'          AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_width,
   Max(CASE WHEN pm.meta_key = '_height'         AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_height,
   Max(CASE WHEN pm.meta_key = '_thumbnail_id'   AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_image_id

FROM   `clk_692135435d_wp_posts` AS p
   INNER JOIN `clk_692135435d_wp_postmeta` AS pm
   ON  p.`ID` = pm.`post_id`

WHERE  p.`post_type`   = 'product'
   AND p.`post_status` = 'publish'

GROUP  BY p.`ID`
ORDER  BY p.`ID` ASC;

Tested and works.测试和工作。

So you need for each required meta data key / value pairs from wp_postmeta table, you will have to add the following line in he SQL query (separated by a coma) :因此,您需要wp_postmeta表中每个必需的元数据键/值对,您必须在 SQL 查询中添加以下行wp_postmeta分隔)

Max(CASE WHEN pm.meta_key = '_the_meta_key'   AND p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS the_column_name

where the _the_meta_key is the desired meta_key and the_column_name the desired column name.其中_the_meta_key是所需的元键,而the_column_name是所需的列名。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM