我需要在过去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';
答案 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()