Помогите разобраться с запрос MySql

Статус
В этой теме нельзя размещать новые ответы.

1Dreamweaver1

Профессор
Регистрация
4 Янв 2008
Сообщения
417
Реакции
45
Есть таблица table(id, dateTo, dateBack, Name, Fax)
В полях dateTo, dateBack: храняться даты вида (4/25/2009).

К примеру, необходимо вывести все "Name, Fax" с 2/5/2009 по 2/25/2009.

Так данных не выводит, хотя в таблице данные между этими датами есть.
Подскажите, что не так.

PHP:
<form action="day_res.php" method="post" id="searchfrm"> 
<div>
<input type="text" name="startday" size="8"> and <input type="text" name="dateEnd" size="8"><br><br>
<input type="submit" name="submit" value="Search"></div>
</form>
$sql="SELECT * FROM table WHERE dateTo >= '".$startday."' AND dateBack <= '".$dateEnd."'";
  $result=mysql_query($sql);
  while($row=mysql_fetch_array($result)){
print"$row[Name] $row[Fax]";
 
Тебе нужно дату передавать в формате: yyyy-mm-dd.
И лучше использовать BETWEEN 'дата_1' AND 'дата_2'

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

Если колонки dateTo, dateBack не имеют тип DATE то их можно преобразовать в даты с помощью функции STR_TO_DATE(dateTo,'%d/%m/%Y').
 
Первый вопрос, какого типа поля dateTo, dateBack в твоей таблице?

Если дата-время, тогда при запросе надо подсовывать дату в формате региональных настроек. Либо в универсальном формате, который понимается всегда yyyy-mm-dd.

Если поля строковые, то правильнее поменять тип на дату и с ней работать.
 
Первый вопрос, какого типа поля dateTo, dateBack в твоей таблице?
тип varchar

Добавлено через 23 минуты
Так то же не выводит :(
PHP:
 $sql="SELECT * FROM table WHERE STR_TO_DATE('dateTo', '%n/%j/%Y') >= '".$startday."' AND STR_TO_DATE('dateTo', '%n/%j/%Y') <= '".$dateEnd."'";
 
Опечатка
PHP:
$sql="SELECT * FROM table WHERE STR_TO_DATE('dateTo', '%n/%j/%Y') >= '".$startday."' AND STR_TO_DATE('dateBack', '%n/%j/%Y') <= '".$dateEnd."'";

формат в полях (dateTo, dateBack)
mm/dd/yyyy (2/25/2009)
 
Зачем дату хранить в varchar, если для нее есть свой тип.
Бывают конечно клинические случаи, когда надо хранить строковые даты типа 38 мартобря 22300 года. Однако если дата четкая, то хранить её строками - это плохой стиль при разработке бд. Так как все эти манипуляции с конвертацией в запросах - сполошное ебалово. Все запросы с функциями типа STR_TO_DATE при смене субд накрываются медным тазом. Так что, если есть возможность без особого гимора проапдэйтить схему бд, то лучше поменять тип.
 
Зачем дату хранить в varchar, если для нее есть свой тип.
Бывают конечно клинические случаи, когда надо хранить строковые даты типа 38 мартобря 22300 года. Однако если дата четкая, то хранить её строками - это плохой стиль при разработке бд. Так как все эти манипуляции с конвертацией в запросах - сполошное ебалово. Все запросы с функциями типа STR_TO_DATE при смене субд накрываются медным тазом. Так что, если есть возможность без особого гимора проапдэйтить схему бд, то лучше поменять тип.

Разрабатывал не я, я доделываю.
Возможности проапдэйтить базу нет. Там записей > 200.000
 
Разрабатывал не я, я доделываю.
Возможности проапдэйтить базу нет. Там записей > 200.000

Создай 2 дополнительных поля типа date и вставь в него даты из соответствующий полей varchar



Поля типа varchar с датой удилишь потом и всё.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху