2017-03-17 89 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