php MySQL查询获取WordPress中给定价格范围内的产品

anauzrmj  于 2023-06-04  发布在  PHP
关注(0)|答案(2)|浏览(165)

需要一个MySQL查询来获取产品,如果提供的价格范围之间的最低和最高价格福尔斯。
我有产品A和产品B。产品A具有等于3400的最小价格和等于5000的最大价格,并且产品B具有等于4400的最小价格和等于7000的最大价格,存储在postmeta表(Wordpress)中。现在我需要一个MySQL查询,应该与所有以下情况下(不是在同一时间)
1.当一个用户设置一个过滤器与最低价格等于3800和离开最高价格过滤器为空,然后产品A必须提取,因为这个价格范围在3400和5000之间
1.当用户将过滤器设置为最大价格等于5000并且将最小价格过滤器留空时,则必须获取产品A和产品B两者,因为5000介于3400和5000之间,这是产品A的价格,并且也介于4400和7000之间,这是产品B的价格。
1.当用户将最小价格过滤器设置为4500并且将最大价格过滤器设置为6000时,由于最大和最小过滤器价格介于产品的最小和最大价格之间,因此必须获取两种产品。

fcg9iug3

fcg9iug31#

可以使用以下查询:

global $wpdb;
$min_price = 3800; // Set the minimum price filter value
$max_price = null; // Set the maximum price filter value (null if empty)
$query = $wpdb->prepare("
    SELECT p.post_id, p.meta_value AS min_price, q.meta_value AS max_price
    FROM {$wpdb->prefix}postmeta AS p
    JOIN {$wpdb->prefix}postmeta AS q ON p.post_id = q.post_id
    WHERE p.meta_key = 'min_price'
        AND q.meta_key = 'max_price'
        AND (
            (%d IS NULL OR p.meta_value <= %d)
            AND (%d IS NULL OR q.meta_value >= %d)
        )
", $min_price, $min_price, $max_price, $max_price);

$results = $wpdb->get_results($query);

if ($results) {
    foreach ($results as $result) {
        $post_id = $result->post_id;
        $min_price = $result->min_price;
        $max_price = $result->max_price;

        // Process the retrieved product data as needed
        // ...
    }
} else {
    echo 'No products found.';
}
cgh8pdjw

cgh8pdjw2#

SELECT p.*
FROM wp_posts p
JOIN wp_postmeta pm_min ON p.ID = pm_min.post_id AND pm_min.meta_key = 'min_price'
JOIN wp_postmeta pm_max ON p.ID = pm_max.post_id AND pm_max.meta_key = 'max_price'
WHERE pm_min.meta_value <= 4500
  AND pm_max.meta_value >= 6000
  AND p.post_type = 'product'
  AND p.post_status = 'publish';

相关问题