我很困惑
我有1/2打查询,所有查询都在MySQL Workbench中返回期望的结果,但是,从WPDB调用时什么也不返回。 我已经测试过WPDB使用非常简单的select语句,但是,当它们变得更加困难时,WPDB不喜欢我提供的内容。在尝试询问之前,我已经尝试了2天-遗憾的是,我没有从WPDB中得到任何错误,只是没有结果。
以下查询返回了一个库存日期,以后所有订单都可以发货。如果跑遍我自己。但是在WPDB中返回空数组。
我知道此SQL需要做一些工作,需要通过准备运行,并且应该使用WPDB前缀-如果我能使它工作,所有这些整理工作都将来。
我发现,仅通过舍弃where子句就可以得到结果-这就是我一直关注的地方。有人可以看到我做错了什么吗?还是最错误?
Select stocketa as NextDispatch From
(
Select ETA as stocketa,(@runtot := @runtot + q1.QtyInbound) AS QtyInbound_rt, (q1.SOH * -1) as InverseSOH FROM
(
Select pm1.meta_value AS ETA, OIM1.meta_value AS QtyInbound, pm2.meta_value as SOH
FROM wp_posts p
LEFT JOIN wp_postmeta pm1 ON ( pm1.post_id = p.ID AND pm1.meta_key = '_expected_at_location_date')
LEFT JOIN wp_atum_order_items OI ON ( OI.order_id = p.id)
LEFT JOIN wp_atum_order_itemmeta OIM1 ON (OIM1.order_item_id =OI.order_item_id AND OIM1.meta_key='_qty' )
LEFT JOIN wp_atum_order_itemmeta OIM2 ON (OIM2.order_item_id =OI.order_item_id AND OIM2.meta_key='_product_id' )
LEFT JOIN wp_postmeta pm2 ON ( pm2.post_id = OIM2.meta_value and pm2.meta_key = '_stock')
Where OIM2.meta_value = 5734 and p.post_status='atum_pending'
Order By ETA ASC
) as q1
) as q2
WHERE q2.QtyInbound_rt > q2.InverseSOH
LIMIT 1
这就是我尝试在WPDB中运行它的方式(我第一次尝试使用WP和WPDB,所以...请别笑
$ProdID = get_the_ID();
echo ("Prod ID:" . $ProdID);
if(!defined('DIEONDBERROR')) define( 'DIEONDBERROR', true );
global $wpdb;
$selectString ="
select ETA as inStockETA, QtyInbound_rt as QI,InverseSOH as ISOI FROM ( Select ETA,(@runtot := @runtot + q1.QtyInbound) AS QtyInbound_rt, (q1.SOH * -1) as InverseSOH
FROM ( Select pm1.meta_value AS ETA, OIM1.meta_value AS QtyInbound, pm2.meta_value as SOH FROM wp_posts p
LEFT JOIN wp_postmeta pm1 ON ( pm1.post_id = p.ID AND pm1.meta_key = '_expected_at_location_date') LEFT JOIN wp_atum_order_items OI ON ( OI.order_id = p.id)
LEFT JOIN wp_atum_order_itemmeta OIM1 ON (OIM1.order_item_id =OI.order_item_id AND OIM1.meta_key='_qty' )
LEFT JOIN wp_atum_order_itemmeta OIM2 ON (OIM2.order_item_id =OI.order_item_id AND OIM2.meta_key='_product_id' )
LEFT JOIN wp_postmeta pm2 ON ( pm2.post_id = OIM2.meta_value and pm2.meta_key = '_stock')
Where OIM2.meta_value = 5734 and p.post_status='atum_pending' Order By ETA ASC
) as q1
) as q2
WHERE q2.QtyInbound_rt > q2.InverseSOH LIMIT 1
";
//$selectString = $wpdb->prepare($selectString,$ProdID);
echo("Select String:" . $selectString);
//$nextShip = $wpdb->get_results($selectString);
//$nextShip = $wpdb->get_results($selectString,ARRAY_A);
$wpdb->show_errors();
$nextShip = $wpdb->get_results($selectString);
$wpdb->print_error();
$wpdb->hide_errors();
放入DIEONDBERROR()之后 输出为:
Prod ID:5734Select String: select ETA as inStockETA, QtyInbound_rt as QI,InverseSOH as ISOI FROM ( Select ETA,(@runtot := @runtot + q1.QtyInbound) AS QtyInbound_rt, (q1.SOH * -1) as InverseSOH FROM ( Select pm1.meta_value AS ETA, OIM1.meta_value AS QtyInbound, pm2.meta_value as SOH FROM wp_posts p LEFT JOIN wp_postmeta pm1 ON ( pm1.post_id = p.ID AND pm1.meta_key = '_expected_at_location_date') LEFT JOIN wp_atum_order_items OI ON ( OI.order_id = p.id) LEFT JOIN wp_atum_order_itemmeta OIM1 ON (OIM1.order_item_id =OI.order_item_id AND OIM1.meta_key='_qty' ) LEFT JOIN wp_atum_order_itemmeta OIM2 ON (OIM2.order_item_id =OI.order_item_id AND OIM2.meta_key='_product_id' ) LEFT JOIN wp_postmeta pm2 ON ( pm2.post_id = OIM2.meta_value and pm2.meta_key = '_stock') Where OIM2.meta_value = 5734 and p.post_status='atum_pending' Order By ETA ASC ) as q1 ) as q2 WHERE q2.QtyInbound_rt > q2.InverseSOH LIMIT 1
WordPress database error: [] select ETA as inStockETA, QtyInbound_rt as QI,InverseSOH as ISOI FROM ( Select ETA,(@runtot := @runtot + q1.QtyInbound) AS QtyInbound_rt, (q1.SOH * -1) as InverseSOH FROM ( Select pm1.meta_value AS ETA, OIM1.meta_value AS QtyInbound, pm2.meta_value as SOH FROM wp_posts p LEFT JOIN wp_postmeta pm1 ON ( pm1.post_id = p.ID AND pm1.meta_key = '_expected_at_location_date') LEFT JOIN wp_atum_order_items OI ON ( OI.order_id = p.id) LEFT JOIN wp_atum_order_itemmeta OIM1 ON (OIM1.order_item_id =OI.order_item_id AND OIM1.meta_key='_qty' ) LEFT JOIN wp_atum_order_itemmeta OIM2 ON (OIM2.order_item_id =OI.order_item_id AND OIM2.meta_key='_product_id' ) LEFT JOIN wp_postmeta pm2 ON ( pm2.post_id = OIM2.meta_value and pm2.meta_key = '_stock') Where OIM2.meta_value = 5734 and p.post_status='atum_pending' Order By ETA ASC ) as q1 ) as q2 WHERE q2.QtyInbound_rt > q2.InverseSOH LIMIT 1
答案 0 :(得分:0)
要了解查询到底发生了什么,请使用以下代码:
$wpdb->show_errors();
$nextShip = $wpdb->get_results($selectString);
$wpdb->print_error();
$wpdb->hide_errors();
让我知道生成的输出。
答案 1 :(得分:0)
顺便说一句,查询中有一些语法错误:
请检查您分配给 $ selectString 变量的查询。