有什么方法可以检索与给定日期变量最接近的日期的记录?
例如:
今天的日期是 2012 年 1 月 10 日,星期四
我的数据库有一个灯具列表,我想从中列出下周三的“下周”灯具,即:2012 年 1 月 16 日,星期三
我如何获得一个文件来输出所有在日期列中包含此行的行?
提前致谢!
编辑:
这是我的示例数据表 - bowl-track_fixtures
:
| fixture_id | league_id | fixture_team_1 | fixture_team_2 | fixture_date |
---------------------------------------------------------------------------------------
| 1 | 2 | 5 | 6 | Wednesday, 30th January |
| 2 | 2 | 4 | 1 | Wednesday, 30th January |
| 3 | 2 | 2 | 3 | Wednesday, 30th January |
| 1 | 2 | 5 | 6 | Wednesday, 06th February |
| 2 | 2 | 4 | 1 | Wednesday, 06th February |
| 3 | 2 | 2 | 3 | Wednesday, 06th February |
etc..
我希望系统只显示距离今天最近和之后的行。
我尝试了以下;
SELECT * FROM `bowl-track_fixtures` WHERE STR_TO_DATE(`fixture_date`, '%l, %d%S %F %Y') >= NOW() ORDER BY STR_TO_DATE(`fixture_date`, '%l, %d%S %F %Y') LIMIT 1;
然而这没有返回结果
@尼卡鲁斯
这是我正在使用的 MySQL 代码:
SELECT fixture_id, MIN( STR_TO_DATE(
fixture_date, '%l, %d%S %F %Y'
) ) AS `next_fixture_date`
FROM `bowl-track_fixtures`
WHERE STR_TO_DATE(
`fixture_date` , '%l, %d%S %F %Y'
) & gt ; = NOW( )
GROUP BY `fixture_id`
)b ON ( a.`fixture_id` = b.`fixture_id` )
AND (
STR_TO_DATE(
a.`fixture_date` , '%l, %d%S %F %Y'
) = b.`next_fixture_date`
)
LIMIT 0 , 30
它返回这个:
MySQL said:
#1305 - FUNCTION db.STR_TO_DATE does not exist
最佳答案
试试这个怎么样:
SELECT
a.*
FROM
`bowl-track_fixtures` a
JOIN
(
SELECT
fixture_id,
MIN(STR_TO_DATE(fixture_date, '%l, %d%S %F %Y')) AS next_fixture_date
FROM
`bowl-track_fixtures`
WHERE
STR_TO_DATE(fixture_date, '%l, %d%S %F %Y') >= NOW()
GROUP BY
fixture_id;
) b
ON (a.fixture_id = b.fixture_id)
AND (STR_TO_DATE(a.fixture_date, '%l, %d%S %F %Y') = b.next_fixture_date);
这将返回灯具的最近和更大(“下一个”)日期。如果有多个具有相同的日期,它将返回它们。
我做了两个假设,因此您可能需要稍微调整一下:
字符串的日期格式。确保这是正确的,否则你可能会得到 0 条记录。
您确定“下一个”日期的粒度。我假设它位于
fixture_id
,因为日期被命名为fixture_date
。
关于php - mysql 在给定后查找下一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250623/