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 г.) и 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 code, который должен отображать записи между этими двумя датами ..
Пожалуйста, помогите мне..
Огромное спасибо..
предполагая, что ваши 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, вам не повезло и их нужно сначала изменить.
Кажется, что простой запрос select с предложением «где» может сделать трюк.
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 FROM projects WHERE sdate <= $ _POST ['edate'] И edate> = $ _POST ['sdate']
Дает вам любой проект с датой начала и датой окончания, которая перекрывает дату начала и дату начала формы. (при условии, что форма sdate и edate находятся в правильном формате)