我总是将日期存储为数据库中的unix时间戳。现在我有两个约会: 我想在网站上展示的一些图片的开始日期和结束日期。图像应在“开始日期”上可见,并在达到“结束日期”后消失。
此刻我使用这个简单的查询:
SELECT name, image, link
FROM exclusive
WHERE CURDATE( ) >= from_unixtime( start_date, '%d-%m-%Y' )
AND CURDATE( ) <= from_unixtime( end_date, '%d-%m-%Y' )
AND category = 'movies'
LIMIT 0 , 5
但是每次返回一个空结果,尽管数据范围内有两个字段。
我在这里做错了什么?
提前致谢。
答案 0 :(得分:3)
试试这个,它有一个额外的好处,你实际上可以使用你在开始和结束日期可能有的任何索引。
SELECT name, image, link
FROM exclusive
WHERE UNIX_TIMESTAMP() BETWEEN start_date AND end_date
AND category = 'movies'
LIMIT 0 , 5
答案 1 :(得分:3)
问题是你是作为字符串类型进行比较,而不是时间戳。因此,格式很重要。改为yyyy-mm-dd使其有效(因为最重要的部分,即年份,位于左侧)。
但更好,并且可以使用索引进行优化,以比较时间戳。
WHERE start_date <= unix_timestamp(curdate())
AND end_date >= unit_timestamp(curdate())
或者,对于某些SQL引擎,使用BETWEEN运算符:
WHERE unix_timestamp(curdate()) BETWEEN start_date AND end_date
答案 2 :(得分:3)
使用DATE()
功能删除时间戳的时间部分,而不是格式化:
SELECT name, image, link
FROM exclusive
WHERE
CURDATE( ) BETWEEN DATE(from_unixtime( start_date ) )
AND DATE(from_unixtime( end_date ) )
AND category = 'movies'
LIMIT 0 , 5