如何在 WooCommerce 中使用 SQL 查询选择特定类别的产品

Posted

技术标签:

【中文标题】如何在 WooCommerce 中使用 SQL 查询选择特定类别的产品【英文标题】:How to select products in specific categories using SQL query in WooCommerce 【发布时间】:2022-01-24 04:57:54 【问题描述】:

我使用下面的代码从特定类别中选择产品并且工作正常,但如果包含多个类别,我想选择产品

SELECT post.ID, post.post_title FROM  `wp_posts` as post

INNER JOIN wp_term_relationships AS tr ON tr.object_id = post.ID 
WHERE
post.`post_type` IN ('product','product_variation') 
AND tr.term_taxonomy_id  IN(32,25)

我使用IN(32,25),它返回所有产品,我如何过滤仅包含在两个类别中的产品?

【问题讨论】:

GROUP BY 1,2 HAVING COUNT(DISTINCT tr.term_taxonomy_id) = 2 【参考方案1】:

要查询特定类别的产品(例如,ID 为 32 和 35 的类别),您可以使用以下命令:

SELECT wp_posts.* FROM wp_posts LEFT JOIN wp_term_relationships 
ON (wp_posts.ID = wp_term_relationships.object_id) 
WHERE 1=1 
AND 
( wp_term_relationships.term_taxonomy_id IN (32,35) ) 
AND 
wp_posts.post_type = 'product' 
AND 
(wp_posts.post_status = 'publish') 
GROUP BY 
wp_posts.ID 
ORDER BY 
wp_posts.post_date DESC

建议使用global $wpdb并利用

$wpdb->prefix 用于您的 wordpress 表“前缀”,而不是硬编码“wp_”

$wpdb->prepare 以确保安全。

像这样:

global $wpdb;

$query = $wpdb->prepare(
    "SELECT $wpdb->prefixposts.* FROM $wpdb->prefixposts LEFT JOIN $wpdb->prefixterm_relationships 
    ON ($wpdb->prefixposts.ID = $wpdb->prefixterm_relationships.object_id) 
    WHERE 1=1 
    AND 
    ( $wpdb->prefixterm_relationships.term_taxonomy_id IN (32,35) ) 
    AND 
    $wpdb->prefixposts.post_type = 'product' 
    AND 
    ($wpdb->prefixposts.post_status = 'publish') 
    GROUP BY 
    $wpdb->prefixposts.ID 
    ORDER BY 
    $wpdb->prefixposts.post_date DESC"
);

$sql_results = $wpdb->get_results($query, ARRAY_A);

出于安全原因,请尽量避免编写自己的sql queries

为了查询你的数据库尝试使用:

wp_queryDocs

wc_get_productDocs

【讨论】:

感谢您的信息,但如果我使用$wpdb->prefixterm_relationships.term_taxonomy_id IN (32,35),所有产品都包含在列出的这两个类别中。我只想退回这两个类别的现有产品。在某些情况下,可能只包含其中一个 @EhsanRavanbakhsh 检查***.com/a/38135711/1533148 你可以使用 php 获取计数并将其传递给准备好的语句。 @Ruvee WHERE 1=1 是为了什么?

以上是关于如何在 WooCommerce 中使用 SQL 查询选择特定类别的产品的主要内容,如果未能解决你的问题,请参考以下文章

sql 如何在WooCommerce站点中查找和删除孤立的产品变体。

sql 如何在WooCommerce站点中查找和删除孤立的产品变体。

WooCommerce:SQL 查询 - 如何获取当前的 customer_id? (不是用户 ID)

使用 SQL 获取已购买商品的数量 - Woocommerce

sql 在WooCommerce订阅中选择有效订阅用户

sql 更新所有常规价格,在WooCommerce中增加40%