gpt4 book ai didi

php - WordPress/MySQL 子查询问题

转载 作者:行者123 更新时间:2023-11-29 12:38:49 25 4
gpt4 key购买 nike

我正在使用 wordpress 和 Woocommerce 为客户创建一个运输插件。我有一个管理屏幕,显示带有可选过滤器的所有货件,即日期范围、承运商、服务方法等。我可以使用以下代码根据日期范围查询数据库中的记录。

SELECT ID
FROM wp_posts
WHERE post_type LIKE 'shop_order'
AND ID = ANY
(SELECT post_id
FROM wp_postmeta
WHERE meta_value
BETWEEN DATE_SUB( NOW( ) , INTERVAL 30 DAY AND NOW( ) );
LIMIT 0 , 30

但是,当我想添加另一个过滤器(例如 Carrier,即“USPS”)时,会返回空结果。添加以下内容时:

AND meta_value LIKE 'USPS' )

我在代码中使用$wpdb,但是,上面是在phpmyadmin中直接调用。

最佳答案

我认为没有返回任何内容的原因是您试图同时过滤一个既是日期又是运营商的元值:

WHERE meta_value
BETWEEN DATE_SUB( NOW( ) , INTERVAL 30 DAY AND NOW( )
AND meta_value LIKE 'USPS'

相反,您可以尝试以下操作:

WHERE 
ID IN
(
SELECT post_id
FROM wp_postmeta
WHERE meta_key = 'date_key'
AND meta_value BETWEEN DATE_SUB( NOW( ) , INTERVAL 30 DAY AND NOW( ) )
)
AND
ID IN
(
SELECT post_id
FROM wp_postmeta
WHERE meta_key = 'carrier_key'
AND meta_value = 'USPS'
)

或者多次加入元表可能会更简洁:

SELECT ID
FROM wp_posts
INNER JOIN wp_postmeta meta_date ON wp_posts.ID = meta_date.post_id AND meta_date.meta_key = 'date_key'
INNER JOIN wp_postmeta meta_carrier ON wp_posts.ID = meta_carrier.post_id AND meta_carrier.meta_key = 'carrier_key'
WHERE post_type LIKE 'shop_order'
AND meta_date.meta_value BETWEEN DATE_SUB( NOW( ) , INTERVAL 30 DAY AND NOW( ) )
AND meta_carrier.meta_value = 'USPS'
LIMIT 0 , 30

由于我不知道您正在使用的元 key ,因此您需要将“date_key”和“carrier_key”替换为正确的值。

关于php - WordPress/MySQL 子查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com