【问题标题】:get nearest next one date records in mysql在mysql中获取最近的下一个日期记录
【发布时间】:2013-11-26 05:50:34
【问题描述】:

我有一个事件表。我显示今天使用的事件。
SELECT * FROM `special_banner_tbl` WHERE `SPLBANNER_pubsdate` = current_date

如果今天没有事件,它必须显示更接近的未来一天记录到当前日期。
如果表格喜欢..
------------------
future_date
---------- -----
30-11-2013
30-11-2013
02-12-2013
03-12-2013
03-12-2013
-- --------------------
它将显示下一个最近的日期 30-11-2013 记录.. 像。

SELECT * FROM `special_banner_tbl` WHERE `SPLBANNER_pubsdate` = nest_nearest_date_records

只有一个最近的未来日期记录,没有任何限制。喜欢
---------------- --------------
事件         未来日期
------- -------- ----------------
第 30 次活动   30-11-2013
第 30 次活动   30-11-2013
-------------------------------

【问题讨论】:

  • 各位感谢您的回答,但我只需要 31-11-2-13 条记录,这比今天更接近。我不知道它的限制,日期是 2013 年 2 月 12 日以及未来的日期..
  • 我只需要没有任何限制的下一个事件日期记录..请帮助..
  • 我真的很担心您的数据库列如何接受31 天为November 的日期。 31-11-2013。我的数据库用ERROR 1292 (22007) 踢了我
  • 嘿,这只是一个示例朋友...

标签: php mysql sql date


【解决方案1】:

无论如何,我会为这种情况编写两个单独的查询,但这也可以正常工作:

SELECT 
    *
FROM special_banner_tbl
WHERE SPLBANNER_pubsdate = CURRENT_DATE

UNION ALL 
SELECT 
    *
FROM special_banner_tbl
WHERE 
    (SELECT COUNT(*) 
    FROM special_banner_tbl 
    WHERE SPLBANNER_pubsdate=CURRENT_DATE) = 0 
    AND 
    SPLBANNER_pubsdate = (
        SELECT MIN(SPLBANNER_pubsdate) 
        FROM special_banner_tbl 
        WHERE SPLBANNER_pubsdate > CURRENT_DATE 
        ORDER BY SPLBANNER_pubsdate
        LIMIT 1
    )

【讨论】:

  • 非常感谢@Ravinder。
【解决方案2】:

您需要或 SLBANNER_pubsdate > current_date 用于未来日期和 SLBANNER_pubsdate ASC 的顺序,因此如果没有找到当前日期的事件,如果找到它将有未来事件,则首先列出当前事件

SELECT * FROM `special_banner_tbl` WHERE `SPLBANNER_pubsdate` = current_date
OR `SPLBANNER_pubsdate` > current_date ORDER BY `SPLBANNER_pubsdate` ASC
 LIMIT 0 , 30

【讨论】:

  • 如果只存在 5 个当前日期记录而其余的是未来日期会发生什么
  • 当前日期的 5 个事件将首先列出,未来的 25 个事件也将在当前事件之后列出
  • OP 希望仅在没有当前日期记录可用时列出未来日期
  • 那他需要用php not in mysql做这个检查
【解决方案3】:

其实你要做的就是利用今天和未来之间的差异。然后您必须按此差值升序对数据进行排序。

希望我能帮上忙!

【讨论】:

  • 不,我不订购任何记录。我只需要下一个未来日期事件记录..
【解决方案4】:

试试这个:

SELECT 
  * 
FROM 
  `special_banner_tbl`
ORDER BY 
  ABS(DATEDIFF(NOW(), `SPLBANNER_pubsdate`))
LIMIT 10

【讨论】:

    【解决方案5】:
    SELECT * FROM `jsproduct_company`
    WHERE future_date > NOW()
    LIMIT 1;
    

    您可以通过上述查询找到确切的下一个日期记录。

    【讨论】:

      【解决方案6】:
      SELECT *
      FROM `special_banner_tbl`
      WHERE `SPLBANNER_pubsdate` >= CURDATE()
      ORDERBY `SPLBANNER_pubsdate` asc
      LIMIT 1 
      

      如果您的字段 SPLBANNER_pubsdate 将包含完整的日期时间值(而不是日期值),则您必须稍微更改 where 子句以隔离日期:

      SELECT *
      FROM `special_banner_tbl`
      WHERE DATE(`SPLBANNER_pubsdate`) >= CURDATE()
      ORDERBY `SPLBANNER_pubsdate` asc
      LIMIT 1 
      

      【讨论】:

        猜你喜欢
        • 2014-03-10
        • 1970-01-01
        • 2017-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-22
        • 2013-10-31
        • 1970-01-01
        相关资源
        最近更新 更多