2

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 查询,它应该显示条目位于这两个日期之间。

请帮我..

非常感谢..

4

5 回答 5

3

假设您的sdateandedate是 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 列,那么您很不走运,需要先更改它们。

于 2008-12-26T11:55:48.983 回答
0

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

Peuso代码:

select sdate, name, edate 
from your_table 
where sdate >= '22 December 2008' and edate <= '30 December 2008'
于 2008-12-26T09:34:50.220 回答
0

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

于 2008-12-26T09:39:36.590 回答
0

首先对用户的输入使用 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'

那应该行得通。

于 2008-12-26T15:07:20.687 回答
0

SELECT project_name, sdate, edate FROM projects WHERE sdate <= $_POST['edate'] AND edate >= $_POST['sdate']

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

于 2008-12-30T17:12:33.723 回答