2 столбца Mysql Поиск диапазона дат в PHP - PullRequest
2 голосов
/ 26 декабря 2008

MySQL column> 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 декабря 2008 г.) и отредактировал (например, 30 декабря 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

Так что мне нужен SQL-запрос php code, который должен отображать записи, лежащие между этими двумя датами.

Пожалуйста, помогите мне ..

Большое спасибо ..

Ответы [ 5 ]

3 голосов
/ 26 декабря 2008

при условии, что ваши sdate и edate имеют столбцы 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 может сравнивать все строки в вашей таблице со статическим значением. Для второго решения необходимо рассчитать разницу для каждой строки в вашей таблице.

Если ваши столбцы sdate и edate не являются столбцами DATE, вам не повезло, и вам необходимо сначала изменить их.

0 голосов
/ 30 декабря 2008

ВЫБЕРИТЕ имя_проекта, sdate, edate ОТ проектов ГДЕ sdate <= $ _POST ['edate'] И отредактировать> = $ _POST ['sdate']

Дает вам любой проект с начальной и конечной датами, которые перекрывают даты начала и окончания формы. (при условии, что форма sdate и edate имеют правильный формат)

0 голосов
/ 26 декабря 2008

Первое использование 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'

Это должно сработать.

0 голосов
/ 26 декабря 2008

Кроме того, чтобы помочь с пользовательским интерфейсом, я рекомендую использовать метод phps strtotime () ... он позволяет вводить даты очень гибкий

0 голосов
/ 26 декабря 2008

Похоже, что простой запрос выбора с предложением "где" может помочь.

Peuso-код:

select sdate, name, edate 
from your_table 
where sdate >= '22 December 2008' and edate <= '30 December 2008'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...