2 столбца Mysql Поиск диапазона дат в PHP
Вопрос
Столбец 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 имеют правильный формат)