如何在 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_query
Docs
或
wc_get_product
Docs
【讨论】:
感谢您的信息,但如果我使用$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)