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

Форум MySQL

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

 

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

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

тема: Корректная сортировка по дате
 
 автор: Василий   (18.01.2012 в 18:11)   письмо автору
 
 

данные сортируются по дате неверно. вывод идет по дате, а не по месяцу.
25-11-2011 в 07:22
24-11-2011 в 10:40
18-01-2012 в 17:19
04-11-2011 в 21:30

$result = mysql_query("SELECT * FROM bd WHERE post='" . mysql_real_escape_string($id) . "' ORDER BY date DESC, id", $db);


подскажите, как исправить и как чтобы вывод шел в формате: 1 декабрь 2011

  Ответить  
 
 автор: Aidaho   (18.01.2012 в 18:20)   письмо автору
 
   для: Василий   (18.01.2012 в 18:11)
 

Переделать формат даты в базе.

а что бы месяц был прописью, то в начале надо месяц вырезать из всей даты, а потом вместо даты подставить буквы.

У меня например, день, месяц и год хранятся в разных столбцах, так на много гибче получается.

  Ответить  
 
 автор: Igorek   (18.01.2012 в 19:47)   письмо автору
 
   для: Aidaho   (18.01.2012 в 18:20)
 

>У меня например, день, месяц и год хранятся в разных столбцах, так на много гибче получается

Где же тут гибкость? O_o

  Ответить  
 
 автор: Aidaho   (18.01.2012 в 20:18)   письмо автору
 
   для: Igorek   (18.01.2012 в 19:47)
 

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

конечно лучше всего в таймстапе, но я например все никак не могу с ним заморочиться и постоянно о нем забываю

  Ответить  
 
 автор: cheops   (18.01.2012 в 18:20)   письмо автору
 
   для: Василий   (18.01.2012 в 18:11)
 

А вы их прямо так и храните в виде строки "25-11-2011 в 07:22"? Лучше хранить в календарном типе СУБД - он сортируется корректно, а в нужный формат преобразовывать уже при выводе даты на страницу. Строки же сортируются как строки, их уже не отсортируешься как даты (можно, конечно, но большой кровью).

  Ответить  
 
 автор: Василий   (18.01.2012 в 19:52)   письмо автору
 
   для: cheops   (18.01.2012 в 18:20)
 

у меня
date
varchar(30)
cp1251_general_ci

что нужно поменять в БД чтобы получить желаемый результат?

  Ответить  
 
 автор: cheops   (18.01.2012 в 19:54)   письмо автору
 
   для: Василий   (18.01.2012 в 19:52)
 

Насколько ценные данные в столбце? Их не жалко потерять, или нужно преобразовать таблицу без потерь?

  Ответить  
 
 автор: Василий   (18.01.2012 в 22:54)   письмо автору
 
   для: cheops   (18.01.2012 в 19:54)
 

желательно без потерь

  Ответить  
 
 автор: cheops   (19.01.2012 в 13:03)   письмо автору
 
   для: Василий   (18.01.2012 в 22:54)
 

Тогда алгоритм следующий:
1. Рядом с существующим, создаем новый столбец типа DATETIME
2. Переносим в него данные, если мало - вручную, если много - при помощи скрипта.
3. Удаляем старый столбец VARCHAR.
4. Присваиваем новому столбцу имя старого столбца

  Ответить  
 
 автор: kosta_in_net   (19.01.2012 в 13:52)   письмо автору
 
   для: Василий   (18.01.2012 в 22:54)
 

Войди в phpMyAdmin и просто поменяй тип столбца в структуре таблицы. Потерь данных не должно произойти. Но, на всякий случай, можешь для начала дамп сохранить

  Ответить  
 
 автор: Василий   (19.01.2012 в 17:01)   письмо автору
 
   для: kosta_in_net   (19.01.2012 в 13:52)
 

date      varchar(30) 14-11-2011 в 10:15

date1      datetime 0000-00-00 00:00:00


потом удалил date, а date1 переименовал в date

теперь вводим комментарий, но дата и время одни нули

0000-00-00 00:00:00

  Ответить  
 
 автор: cheops   (19.01.2012 в 23:41)   письмо автору
 
   для: Василий   (19.01.2012 в 17:01)
 

Лучше по-моему алгоритму идти :)

  Ответить  
 
 автор: kosta_in_net   (20.01.2012 в 00:20)   письмо автору
 
   для: cheops   (19.01.2012 в 23:41)
 

Сколько людей - столько и мнений

  Ответить  
 
 автор: cheops   (20.01.2012 в 02:28)   письмо автору
 
   для: kosta_in_net   (20.01.2012 в 00:20)
 

Смысл в том, что дату вида "25-11-2011 в 07:22" нужно трансформировать в "2011-11-25 07:22", это действительно лучше скриптом делать... ну можно без лишних столбцов, сначала произвести трансформацию, а затем сменить тип столбца при помощи ALTER TABLE. Теоретически можно осуществить преобразование лишь средствами MySQL, но запрос получиться довольно монструозный.

  Ответить  
 
 автор: kosta_in_net   (20.01.2012 в 03:00)   письмо автору
 
   для: cheops   (20.01.2012 в 02:28)
 

Не обратил внимание на нестандартный формат даты у человека... Как рах изходя из того, что могут возникнуть подводные камни, писал про дамп данных перед преобразованием.
Но для преобразования в том же админе достаточно выполнить запрос:
UPDATE basename SET date=CONCAT(SUBSTRING(date,7,4),SUBSTRING(date,3,4),SUBSTRING(date,1,2),SUBSTRING(date,13,6))

  Ответить  
 
 автор: kosta_in_net   (20.01.2012 в 00:17)   письмо автору
 
   для: Василий   (19.01.2012 в 17:01)
 

Если поле имеет такие параметры:
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Дата при добавлении и обновлении вставляется автматически.
При отсутствии DEFAULT CURRENT_TIMESTAMP, временную метку при добавлении нужно формировать скриптом

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

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