Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не могу вывести строки по диапазону дат. Помогите пожалуйста
 
 автор: СтепаныЧ   (05.07.2011 в 12:15)   письмо автору
 
 

Всем доброго времени суток.
Нужно выводить строки по диапазону дат но выводятся лишние

Вот как я делал:
$date_start="02-07-2011";
$date_stop="04-07-2011";
В базе 5 записей в этом диапазоне:
2011-07-03 20:24:46
2011-07-03 18:37:58
2011-07-03 18:35:14
2011-07-03 18:30:26
2011-07-03 18:24:11

Вот как я делал:
"SELECT id,title FROM article WHERE DATE_FORMAT(date,'%d%m%Y') BETWEEN '$date_start' AND '$date_stop'"

Но почему-то выводятся записи вот с какими датами:

2011-07-03 20:24:46
2011-07-03 18:37:58
2011-07-03 18:35:14
2011-07-03 18:30:26
2011-07-03 18:24:11
2011-05-03 13:31:30
2011-05-03 13:29:07
2011-05-03 13:17:08
2011-05-03 13:16:47

Т.е месяц не учитывается.

Прошу помощи в решении задачи
поле date в формате DATETIME

  Ответить  
 
 автор: cheops   (05.07.2011 в 12:39)   письмо автору
 
   для: СтепаныЧ   (05.07.2011 в 12:15)
 

Это связано с тем, что даты сравниваются с начала до конца, когда вы форматируете дату при помощи DATE_FORMAT() вы всю сортировку нарушаете, так как вместо того, чтобы сначала сравнить года, потом месяцы, потом дни, у вас сначала сравниваются дни, потом месяцы, потом годы, преобразуйте даты к MySQL формату
$date_start="2011-07-02";
 $date_stop="2011-07-04";
и сравнивайте с ними
"SELECT id,title FROM article
WHERE `date` BETWEEN '$date_start' AND '$date_stop'"

  Ответить  
 
 автор: СтепаныЧ   (05.07.2011 в 12:41)   письмо автору
 
   для: cheops   (05.07.2011 в 12:39)
 

А тогда вопрос как это сделать без кучи кода. Есть ли какие-нибудь функции?
Спасибо за разъяснение

  Ответить  
 
 автор: Valick   (05.07.2011 в 13:00)   письмо автору
 
   для: СтепаныЧ   (05.07.2011 в 12:41)
 

о какой куче кода идет речь? вам пердложили меньше кода чем у Вас было

  Ответить  
 
 автор: СтепаныЧ   (05.07.2011 в 13:06)   письмо автору
 
   для: Valick   (05.07.2011 в 13:00)
 

Да я понял это, но пользователь изначально вводит даты так: 02-07-2011 как все привыкли, а в sql запросе она перевернута, вопрос как это сделать в коде?
Так оно и у меня изначально работало в таком виде 2011-07-02

  Ответить  
 
 автор: cheops   (05.07.2011 в 13:24)   письмо автору
 
   для: СтепаныЧ   (05.07.2011 в 13:06)
 

Лучше всего ввести функцию-конвертор, через которую пропускать дату, введенную пользователями, можно начать отталкиваться от следующего скрипта
<?php
  $date 
"02-07-2011";
  echo 
convertdate($date);
  function 
convertdate($date)
  {
    list(
$day$month$year) = explode("-"$date);
    return 
"$year-$month-$day";
  }
?>

  Ответить  
 
 автор: СтепаныЧ   (05.07.2011 в 13:32)   письмо автору
 
   для: cheops   (05.07.2011 в 13:24)
 

Спасибо большое, я уже такую организовал:
function convert_date ($date) {
$array = explode("-", $date);
$array = array_reverse($array);
$date = implode("-", $array);

return $date;
}
Вопрос решен, всем спасибо

  Ответить  
 
 автор: Valick   (05.07.2011 в 13:32)   письмо автору
 
   для: СтепаныЧ   (05.07.2011 в 13:06)
 

а проверка на несуществующие даты есть? будь то 17 месяц или 56 число?
обычно при вводе дат пользователя слегка ограничивают в этом плане,
например выбор даты по календарику или раздельный выпадающий список
собрать нужную дату в любом порядке при таких условиях не составляет труда.

  Ответить  
 
 автор: СтепаныЧ   (05.07.2011 в 14:49)   письмо автору
 
   для: Valick   (05.07.2011 в 13:32)
 

А это впринипе не важно, я пишу прогу для своих работников, и им тупить смысла нет.

  Ответить  
 
 автор: Filsh   (08.07.2011 в 00:48)   письмо автору
 
   для: СтепаныЧ   (05.07.2011 в 14:49)
 

>А это впринипе не важно, я пишу прогу для своих работников, и им тупить смысла нет.

это не есть хорошо, плохой подход
нужно делать всегда продумано и на будущее

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования