我们有一个预订表格,用户可以预订多个旅游和几个旅游日期。订单在预订后创建并设置为“待处理”状态。我们希望在旅行日期前两周处理订单。
我们写了一个cron工作函数,其目的是让所有处于“待定”状态的订单,并且巡回日期恰好有2周时间。
这是查询
$orders = $wpdb->get_results("SELECT o.*, b.departure_point, b.tour_date, b.tour_id FROM ".CT_TOUR_BOOKINGS_TABLE." b JOIN ".CT_ORDER_TABLE." o ON o.id = b.order_id WHERE o.status = 'pending' AND NOW( ) + INTERVAL 2 WEEK = b.tour_date");
由于我们进行了一些试用预订,因此上述行不起作用。声明
有什么问题吗?"NOW( ) + INTERVAL 2 WEEK = b.tour_date"
感谢您的帮助。
答案 0 :(得分:0)
立即尝试()+ 14?我在使用sysdate + 14的oracle上尝试了类似的东西并且它有效。
答案 1 :(得分:0)
你应该用这个来获得两周的间隔
DATE_SUB(curdate(), INTERVAL 2 WEEK)
您可以根据需要更改日期格式
答案 2 :(得分:0)
" NOW()+ INTERVAL 2 WEEK = b.tour_date"
应该是
" DATE_ADD(NOW(),INTERVAL 2 WEEK)= b.tour_date"
代替
答案 3 :(得分:0)
如果tour_date
是datetime
字段,则它不会与NOW( ) + INTERVAL 2 WEEK
匹配,因为它也会尝试比较小时,分钟和秒。您需要比较的是date
部分,请尝试以下操作:
AND DATE(b.tour_date) = DATE(NOW() + INTERVAL 2 WEEK)
Here有关MySQL DATE
功能的文档。
答案 4 :(得分:0)
您可以尝试使用DATEDIFF
:
"SELECT o.*,
b.departure_point,
b.tour_date,
b.tour_id
FROM ".CT_TOUR_BOOKINGS_TABLE." b
JOIN ".CT_ORDER_TABLE." o
ON o.id = b.order_id
WHERE o.status = 'pending'
AND DATEDIFF(b.tour_date, today) = 14"
答案 5 :(得分:0)
试试这个。
$orders = $wpdb->get_results("SELECT o.*, b.departure_point, b.tour_date, b.tour_id FROM ".CT_TOUR_BOOKINGS_TABLE." b JOIN ".CT_ORDER_TABLE." o ON o.id = b.order_id WHERE o.status = 'pending' AND ((GETDATE()+14) = b.tour_date");
'现在'不是公认的内置函数名称。相反,使用GetDate()。
供参考 https://www.sqlservercentral.com/Forums/Topic183904-8-1.aspx