2017-05-24 64 views
0

我需要從過去7天獲得所有付費和臨時條目,但我不斷收到所有返回的內容。我不確定我在做什麼錯我已經閱讀了很多這裏的帖子,而且不知道它的含義。 MySQL 5.6,如果它對我一直在做的事情有任何差異。MySQL過去7天被忽略

SELECT 
DATE_FORMAT(FROM_UNIXTIME(ct.entry_date),'%d/%m/%Y') AS booking_date, 
cd.field_id_69 AS marriage_date, 
cd.field_id_54 AS email_address, 
CONCAT(cd.field_id_9, ' ', cd.field_id_10) AS bride_name, 
CONCAT(cd.field_id_13, ' ', cd.field_id_14) AS groom_name, 
ctco.title AS centre_and_course_date, 
(SELECT DATE_FORMAT(FROM_UNIXTIME(col_id_1),'%d/%m/%Y') FROM 
exp_channel_grid_field_50 cg WHERE cg.entry_id = ctco.entry_id ORDER BY 
cg.row_id DESC LIMIT 1) AS course_end_date, 
ct.status AS payment_status 
FROM exp_channel_titles ct 
JOIN exp_channel_data cd ON cd.entry_id = ct.entry_id 
JOIN exp_relationships rco ON rco.parent_id = ct.entry_id AND rco.field_id = 41 
JOIN exp_channel_titles ctco ON rco.child_id = ctco.entry_id 
WHERE ct.channel_id = 2 
AND ct.entry_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
AND ct.status = 'Paid' 
AND ct.status = 'Provisional'; 
+0

'BETWEEN'需要遵循由2個日期。你只有一個日期。 – Barmar

+0

間隔沒有關閉嗎? – DuzAwe

+0

不,間隔只是從'CURDATE()'中減去一段時間。 – Barmar

回答

1

有問題,你WHERE聲明

AND ct.entry_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND ct.status = 'Paid' AND ct.status = 'Provisional'; 

BETWEEN關鍵字需要後跟2個日期,所以ct.status ='付費'將轉換爲日期返回NULL。因此你的WHERE聲明變成。

AND ct.entry_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND NULL AND ct.status = 'Provisional'; 

結果是您的查詢將返回status ='Provisional'的所有數據。

你可以嘗試修改WHERE聲明

AND ct.entry_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() AND ct.status IN ('Paid', 'Provisional'); 
0

BETWEEN的語法是BETWEEN startdate AND enddate。您寫道:

ct.entry_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND ct.status = 'Paid' 

所以它的使用DATE_SUB(CURDATE(), INTERVAL 7 DAY)爲起始日期,ct.status = 'Paid'作爲結束日期。我很驚訝它匹配任何東西。

將其更改爲:

ct.entry_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() 

或者,如果你沒有在未來的任何日期,你可以簡單的寫:

ct.entry_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
+0

你的兩條建議都沒有任何回報。沒有錯誤,0行受影響 – DuzAwe

+0

你可以用示例數據製作一個sqlfiddle嗎? – Barmar

+1

AND ct.status ='已付' AND ct.status ='臨時'是不可能的。一列如何同時等於兩個不同的東西? – Barmar