Вопрос

Столбец MySQL > sdate, edate (это второй столбец).

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 г.) и edate (например, 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-кода, который должен отображать записи, находящиеся между этими двумя датами.

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

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

Это было полезно?

Решение

предполагая, что ваш 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, вам не повезло, и вам нужно сначала их изменить.

Другие советы

Кажется, что простой запрос выбора с предложением «где» может помочь.

Peuso-код:

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

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

Сначала используйте 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'

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

SELECT project_name, sdate, edate ОТ проектов WHERE sdate <= $_POST['edate'] И редактировать >= $_POST['sdate']

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top