2017-03-17 92 views
0

检查之日起2周内,我们有一个预订表格,用户可以在这里预订了几个旅游团和几个巡回演出的日期。订单在预订后创建,并设置为“挂起”状态。我们想要在游览日期前两周完成订单。SQL查询,以便从今天

我们写了一个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

NOW()+ 14试试?我在oracle上使用sysdate + 14尝试了这样的事情,它工作。

0

应用户这得到两个周的时间间隔

DATE_SUB(curdate(), INTERVAL 2 WEEK) 

你可以改变你的日期格式,因为你需要

0

“NOW()+间隔2周= b.tour_date”

应该是

“DATE_ADD(NOW(),INTERVAL 2 WEEK)= b.tour_date”

而不是

0

如果tour_datedatetime字段,那么它将不匹配NOW() + INTERVAL 2 WEEK,因为它会尝试比较小时,分钟和秒。你需要比较的是仅date部分,请尝试以下操作:

AND DATE(b.tour_date) = DATE(NOW() + INTERVAL 2 WEEK) 

Here的关于MySQL的DATE函数的文档。

+0

感谢您的答复,请问此代码的工作吗? DATEDIFF(CURDATE(),b.tour_date)%14 = 0 – Bora

+0

不,它会返回所有都是14,28,42的日期..等等天内。 –

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" 
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"); 

'now'不是公认的内置函数名称。相反,使用GetDate()。

仅供参考 https://www.sqlservercentral.com/Forums/Topic183904-8-1.aspx