php - mysql 在给定后查找下一个日期

标签 php mysql

有什么方法可以检索与给定日期变量最接近的日期的记录?

例如:

今天的日期是 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);

这将返回灯具的最近和更大(“下一个”)日期。如果有多个具有相同的日期,它将返回它们。

我做了两个假设,因此您可能需要稍微调整一下:

  1. 字符串的日期格式。确保这是正确的,否则你可能会得到 0 条记录。

  2. 您确定“下一个”日期的粒度。我假设它位于 fixture_id,因为日期被命名为 fixture_date

关于php - mysql 在给定后查找下一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250623/

相关文章:

php - 如何将 SQLSRV 扩展安装到 php XAMPP

php - 如何为数据库中的foreach数据添加索引?

mysql - 从MySQL中的表中选择并添加两列相乘的结果

MYSQL - NOT 与 var=false

php - 将每个数组项插入单独的字段中

Php mysql - 在一个查询中插入多个表

php - 如何在 centOS 上使用 YUM 将 php 5.2.10 升级到 5.2.11

java - 托管在 Internet 上运行的 Java Web 应用程序

mysql 从 member 表中获取 50%

php - 拉维尔 5 : how can I retrieve and display all posts that belong to certain category