PHP 2 sütun MySQL tarih aralığı arama

5 Cevap php

MySQL sütun> sdate, edate (onun 2 sütun).

sdate proje bitiş için bitiş tarihi, proje başlangıç ​​tarihi ve edate başlar.

bu yüzden aralarında bir arama yapmanız gerekir ..

<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

böylece kullanıcı girilen sdate (örneğin, 22 Aralık 2008) ve edate (örn, 30 Aralık 2008) diyelim.

Bu göstermesi gerekir

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

Yani ben bu 2 tarihleri ​​arasında yatıyor girişlerini görüntülemek gereken bir php kod sql sorgu gerekir ..

Lütfen bana yardımcı olun ..

Çok teşekkürler ..

5 Cevap

Lütfen sdate ve edate MySQL sütunlar tiptedir DATE Eğer aşağıdaki yapabileceğini varsayarak:

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

veya DATEDIFF kullanabilirsiniz

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

MySQL statik bir değer için tablodaki tüm satırları karşılaştırabilirsiniz çünkü ilki daha verimlidir. İkinci çözüm için bu tablodaki her satır için farkını hesaplamak gerekiyor.

Lütfen sdate ve edate sütunlar TARİH sütunlar değilseniz, şans dışında ve önce onları değiştirmek gerekir.

Bu hile yapabileceği bir "nerede" fıkra ile basit bir seçme sorgusu gibi görünüyor.

Peuso-kodu:

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

Bir kenara, UI ile yardımcı olarak, ben phps strtotime () yöntemini kullanarak öneriyoruz ... tarihlerini very esnek girmek için yapar

Kullanıcı girişi ilk kullanımı mktime ()

$time = mktime(format from user);

sonra yapın

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'

Bu çalışması gerekir.

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

Size Form başlangıç ​​ve bitiş tarihini üst üste başlangıç ​​tarihi ve bitiş tarihi ile herhangi bir proje verir. (Form sdate ve edate doğru biçimde olduğunuzu varsayarak)