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

Форум MySQL

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

 

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

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

тема: Сортировка даты
 
 автор: codexomega   (08.06.2006 в 21:41)   письмо автору
 
 

Есть таблица с новостями, где дата - поле varchar.
При выводе новостей из БД, они странно сортируются.
Привожу 2 вывода:


По убыванию:

25/10/2005  
20/10/2005  
19/10/2005  
18/10/2005  
16/10/2005  
10/08/2005  
07/06/2006  


По возрастанию:

07/06/2006  
10/08/2005  
16/10/2005  
18/10/2005  
19/10/2005  
20/10/2005  
25/10/2005 


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

   
 
 автор: codexomega   (08.06.2006 в 22:02)   письмо автору
 
   для: codexomega   (08.06.2006 в 21:41)
 

Посмотрел в сети, вроде тип поля выбрал не подходящий для даты.
Говорят надо использовать datetime.
Но вот как это всё заносить в БД, и вытаскивать оттуда в нужном, читабильном формате:
dd/mm/yyyy ?

   
 
 автор: codexomega   (08.06.2006 в 22:42)   письмо автору
 
   для: codexomega   (08.06.2006 в 22:02)
 

Короче, для занесения даты в базу, можно вроде использовать функцию SQL To_Date()

INSERT ... To_Date('string',['format']) ...


Эксперимент начался, посмотрим...

   
 
 автор: codexomega   (09.06.2006 в 00:19)   письмо автору
 
   для: codexomega   (08.06.2006 в 22:42)
 


FUNCTION TO_DATE does not exist

:)

---------------------------------------------------
Вот так работает:

$sql = "INSERT INTO religion_news ".
"(id, news_date, description) ".
"VALUES(NULL, STR_TO_DATE('$news_date','%d/%m/%Y'),'$description')"; 


Когда я сменил тип поля на date

Только вот дата добавляется почему-то в формате Y-m-d вместо d/m/Y
Можно сделать так чтобы она была d/m/Y?

Видел функцию DATE_FORMAT()

Пробовал выводить данные таким образом:
SELECT DATE_FORMAT(news_date,'%d/%m/%Y') ...

Но не работает.
Не подскажете как правильно со всем этим работать?

   
 
 автор: cheops   (09.06.2006 в 11:49)   письмо автору
 
   для: codexomega   (09.06.2006 в 00:19)
 

Хм... а почему дата хранится с поле VARCHAR? Было бы удобнее воспользоваться временным типом, например, DATETIME, а при выводе форматировать дату при помощи DATE_FORMAT(), которая, кстати, будет работать только с временным типом, т.е. передать ей произвольную строку не получится...

   
 
 автор: codexomega   (09.06.2006 в 13:23)   письмо автору
 
   для: cheops   (09.06.2006 в 11:49)
 

Но я же написал что тип поля уже сменил.
Теперь он у меня DATE(часы и минуты мне не нужны).
Для добавления даты, используется формуляр, где пользователь сам заносит дату в формате dd/mm/YYYY
Вкратце, мне надо сделать так, чтобы эта самая дата правильно заносилась в базу данных, в поле типа DATE.
А потом, выводилась в таком же формате как в формуляре: dd/mm/YYYY
Вот я здесь и пробовал такое сделать, только застрял.

   
 
 автор: Trianon   (09.06.2006 в 13:39)   письмо автору
 
   для: codexomega   (09.06.2006 в 13:23)
 

Так Вы ж вроде всё нашли?
Передавать в базу через INSERT/UPDATE .... STR_TO_DATE('$value', '%d/%m/%Y');
Извлекать из базы через SELECT DATE_FORMAT(news_date,'%d/%m/%Y') FROM ....

   
 
 автор: codexomega   (09.06.2006 в 19:06)   письмо автору
 
   для: Trianon   (09.06.2006 в 13:39)
 


$sql_select = "SELECT DATE_FORMAT(news_date,'%d/%m/%Y'), description ".
"FROM religion_news ".
"WHERE id = $update_element"; 

$sql_records = mysql_query($sql_select) or die('SQL Error !'.$sql_select.'<br/>'.mysql_error()); 



<?php while ( $list mysql_fetch_array$sql_records ) ) { ?>
   <tr>
      <td>news_date:</td>
      <td>
         <input name="news_date" type="text" readonly="true"  value="<?php echo $list['news_date'];?>" size="20" maxlength="20"/>
         <a href="javascript:showCal('Calendar1')">Select Date</a>
     </td>
   </tr>
...
?>


Да, так и делаю, но при выводе, в поле с датой, вместо даты, вот такая ошибка:


<br /><b>Notice</b>:  Undefined index:  news_date in <b>C:\Server\Apache2\htdocs\religion\manage_news.php</b> on line <b>178</b><br />

   
 
 автор: Trianon   (09.06.2006 в 19:20)   письмо автору
 
   для: codexomega   (09.06.2006 в 19:06)
 

Ну, это не повод для грусти:

$sql_select = "SELECT DATE_FORMAT(news_date,'%d/%m/%Y') as news_date, description ". 
"FROM religion_news ". 
"WHERE id = $update_element"; 

   
 
 автор: codexomega   (09.06.2006 в 19:27)   письмо автору
 
   для: Trianon   (09.06.2006 в 19:20)
 

Здорово.
Работает.
Спасибо большое!

   
 
 автор: codexomega   (09.06.2006 в 22:08)   письмо автору
 
   для: codexomega   (09.06.2006 в 19:27)
 

Я в шоке!
Сортировка то также не работает, как и прежде!!
На такой запрос:

SELECT id, DATE_FORMAT( news_date, '%d/%m/%Y' ) AS news_date, description
FROM religion_news
ORDER BY news_date DESC ;


Выводит это:

id -|- news_date   -|-  description
-------------------------------------------
6  -|- 25/10/2005  -|- В раздел Статьи добавлена поучительная суфийская с... 
5  -|- 20/10/2005  -|- Добавлена статья о шабаше из книги Элифаса Леви... 
4  -|- 19/10/2005  -|- Добавлены новые материалы в библиотеку: Сборник ко... 
3  -|- 18/10/2005  -|- Обновление дизайна сайта 
2  -|- 16/10/2005  -|- Добавление статей 
1  -|- 10/08/2005  -|- Создание сайта. 
9  -|- 07/06/2006  -|- Добавлен раздел Молитвы 


Это результат прямого запроса в phpMyAdmin

Что за дребедень?
Впервые с таким сталкиваюсь.

   
 
 автор: Trianon   (09.06.2006 в 22:33)   письмо автору
 
   для: codexomega   (09.06.2006 в 22:08)
 

Сами же news_date переделали. Теперь удивляетесь.

SELECT id, DATE_FORMAT( news_date, '%d/%m/%Y' ) AS news_date, description 
FROM religion_news 
ORDER BY religion_news.news_date DESC ;

   
 
 автор: codexomega   (09.06.2006 в 23:03)   письмо автору
 
   для: Trianon   (09.06.2006 в 22:33)
 

Да, точно.
Примного вам благодарен.

   
Rambler's Top100
вверх

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