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 (例: 22 December 2008 ) と edate (例: 30 December 2008 ) を入力したとします。

表示されるはずです

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

だから私はこれらの2つの日付の間にあるエントリを表示するPHPコードのSQLクエリが必要です..

私を助けてください..

どうもありがとう..

4

5 に答える 5

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はテーブル内のすべての行を静的な値と比較できるため、最初の方法の方が効率的です。2番目のソリューションでは、テーブルのすべての行の差を計算する必要があります。

sdateと列edateがDATE列でない場合は、運が悪いため、最初にそれらを変更する必要があります。

于 2008-12-26T11:55:48.983 に答える
0

SELECT project_name, sdate, edate FROM プロジェクト WHERE sdate <= $_POST['edate'] AND edate >= $_POST['sdate']

フォームの開始日と終了日が重なる開始日と終了日を持つプロジェクトを提供します。(フォーム sdate と edate が正しい形式であると仮定します)

于 2008-12-30T17:12:33.723 に答える
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

「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 に答える