我有一个名为 schedules 的表,其中包含列日、月、年等。我需要的是在 $datefrom 和 $dateto 之间选择记录。这是我的代码不起作用:(
SELECT * FROM schedules WHERE CONCAT(year, month, day) BETWEEN $datefrom AND $dateto
我不确定这是否正确。请帮忙。
就像 showdev 在评论中已经说过的那样,您必须将从函数返回的字符串CONCAT()
转换为日期。但是请考虑,没有索引可以用于此。
我建议您在表中创建一个包含完整日期的附加列。我不知道您是否出于性能原因将日期分为 3 列,但请尝试一下,如果只有一列就足够了。通常它足够快(索引时)。
如果您不想这样做并且想要使用索引(如果它们存在于这 3 列中),则必须像这样编写查询:
SELECT * FROM schedules WHERE
`year` BETWEEN YEAR($datefrom) AND YEAR($dateto)
AND `month` BETWEEN MONTH($datefrom) AND MONTH($dateto)
AND `day` BETWEEN DAY($datefrom) AND DAY($dateto)