MySQL最近7天被忽略了

时间:2017-05-24 15:59:21

标签: mysql

我需要在过去7天内获得所有付费和临时入境,但我会不断收到所有退回的内容。我不确定我做错了什么我在这里阅读了不少帖子,无法理解它是什么。 MySQL 5.6,如果它与我一直在做的事情有任何不同。

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';

2 个答案:

答案 0 :(得分: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 ='付费' 将转换为 DATE ,并返回NULL。因此,您的 WHERE 语句将变为。

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

结果是您的查询将返回状态='临时'的所有数据。

您可以尝试将 WHERE 语句修改为

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

答案 1 :(得分:0)

rownames(Sorted.student)<-1:nrow(Sorted.student) 的语法是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()