2009-10-28 3 views
0
года

У меня есть проблема для запроса записей в MySQLMySQL запрос с использованием даты

объяснение ниже Пользователь может выбрать дату для назначения в переменной FromDate и Todate

пример.

$fromdate = 2008/01/01 
$todate = 2009/10/31 

В описанном выше случае, я должен цикла и запроса с FF:

SELECT * FROM table where date BETWEEN '2008/01/01' AND '2008/12/31'; 

второй петли

SELECT * FROM table where date BETWEEN '2009/01/01' AND '2009/10/31'; 

, если $fromdate и $todate более чем один год, то я должен ограничьте мой запрос в год. Но если менее одного года, используйте $fromdate и $todate в запросе.

Заранее спасибо

Тирсо

+0

Так что же такое вопрос/проблема? Формулировка запроса или что-то еще? –

ответ

1

Вы можете использовать что-то вроде этого, чтобы вычислить дату.

$d1 = new DateTime($todate); 
$d2 = new DateTime($fromdate); 
$d2->modify("+1 year"); 
$min = min($d1, $d2); 
$todate = $min->format('Y/m/d'); 

Если вы хотите, чтобы разбиваться результаты, вы должны изменить $fromdate на каждой странице, прежде чем делать расчет $todate. Например, если вы находитесь на второй странице, сначала загрузите $fromdate в объект DateTime и добавьте один год, если вы находитесь на третьей странице, добавьте два года и т. Д.

2

Не совсем уверен, что вы имеете в виду, но можете не использовать функцию mysql Year?

что-то вроде:

SELECT * FROM table WHERE YEAR(`yourdatefield`) = '2008' 

или

SELECT * FROM table WHERE YEAR(`yourdatefield`) BETWEEN '2008' AND '2009'; 
1

Прежде всего, формат даты в MySQL является YYYY-MM-DD (не YYYY/MM/DD), поэтому убедитесь, вы делаете это правильно. Возможно, поэтому вы видите неправильные результаты.

BETWEEN работает очень хорошо с (правильно отформатированными) датами. Пример запроса:

SELECT * FROM table WHERE date BETWEEN '2008-05-12' AND '2009-04-23'; 
Смежные вопросы