【问题标题】:2 Column Mysql Date Range Search in PHPPHP中的2列Mysql日期范围搜索
【发布时间】:2010-09-28 11:06:07
【问题描述】:

MySQL 列 > sdate, edate(它的第 2 列)。

sdate 是项目开始的开始日期,edate 是项目结束的结束日期。

所以我需要在它们之间进行搜索..

<strong>Search</strong><br />
<form method="post" action="search.php">
  Start Report Date : <input type="text" name="sdate" />
  End Report Date : <input type="text" name="edate" />
  <input type="submit" name="Submit" value="Search" />
</form>

This is example data in mysql
sdate             Project Name      edate
22 December 2008  project 1         23 December 2008
25 December 2008  project 2         26 December 2008
24 December 2008  project 3         27 December 2008
1  January 2008   project 4         20 January 2008
10 December 2008  project 5         12 December 2008

假设用户输入了 sdate(例如,2008 年 12 月 22 日)和 edate(例如,2008 年 12 月 30 日)。

应该会显示

22 December 2008  project 1         23 December 2008
25 December 2008  project 2         26 December 2008
24 December 2008  project 3         27 December 2008

所以我需要一个 php 代码 sql 查询,它应该显示位于这两个日期之间的条目..

请帮帮我..

非常感谢..

【问题讨论】:

  • 请同时发布表格架构!

标签: php mysql search date range


【解决方案1】:

似乎带有“where”子句的简单选择查询可以解决问题。

标码:

select sdate, name, edate 
from your_table 
where sdate >= '22 December 2008' and edate <= '30 December 2008'

【讨论】:

  • MySQL 仅支持日期文字中的 YYYY-MM-DD 或 YY-MM-DD。要使用上述格式,您必须使用 STR_TO_DATE() 函数对其进行解析。
【解决方案2】:

顺便说一句,为了帮助 UI,我建议使用 phps strtotime() 方法...它使得输入日期非常灵活

【讨论】:

    【解决方案3】:

    假设您的 sdateedate 属于 MySQL 列类型 DATE,您可以执行以下操作:

    SELECT  
      Project_Name
    , sdate
    , edate
    FROM your_table 
    WHERE 
      sdate <= '2008-12-26'
     AND 
      edate >= '2008-12-26'
    

    或者你可以使用 DATEDIFF

    SELECT  
      Project_Name
    , sdate
    , edate
    FROM your_table 
    WHERE 
      DATEDIFF(sdate, '2008-12-26') <= 0
     AND 
      DATEDIFF(edate, '2008-12-26') >= 0
    

    第一个更有效,因为 MySQL 可以将表中的所有行与静态值进行比较。对于第二种解决方案,它需要计算表中每一行的差异。

    如果您的 sdateedate 列不是 DATE 列,那么您运气不好,需要先更改它们。

    【讨论】:

      【解决方案4】:

      首先对用户的输入使用 mktime()

      $time = mktime(format from user);
      

      然后做

      SELECT Project_Name, sdate, edate FROM table WHERE 
        UNIX_TIMESTAMP(STR_TO_DATE(sdate, '%e %m %Y')) <= '$time'
       AND 
        UNIX_TIMESTAMP(STR_TO_DATE(edate, '%e %m %Y')) >= '$time'
      

      应该可以的。

      【讨论】:

        【解决方案5】:

        选择项目名称、日期、日期 来自项目 WHERE sdate = $_POST['sdate']

        为您提供开始日期和结束日期与表单开始日期和结束日期重叠的任何项目。 (假设 sdate 和 edate 格式正确)

        【讨论】:

          猜你喜欢
          • 2013-10-13
          • 1970-01-01
          • 1970-01-01
          • 2015-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多