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

Форум MySQL

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

 

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

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

тема: сортировка по дате в формате "25-11-2011 в 07:22"
 
 автор: Василий   (03.02.2012 в 18:04)   письмо автору
 
 

добрый день!
у меня в поле date запись имеет такое значение 25-11-2011 в 07:22
и сортировка у меня идет, соответственно, по первому числу. и получается что сообщение 25-11-2011 ставится выше чем 20-01-2012

date - varchar(30)

  Ответить  
 
 автор: cheops   (03.02.2012 в 18:08)   письмо автору
 
   для: Василий   (03.02.2012 в 18:04)
 

А в чем вопрос? Как отсортировать правильно?

  Ответить  
 
 автор: Василий   (03.02.2012 в 18:13)   письмо автору
 
   для: cheops   (03.02.2012 в 18:08)
 

сортируются не верно.
надо сообщения свежие выводить первыми, а потом идут старые.

а сейчас сортирвка работает по дате.
т.е если сравнить 25 янв. 2012 и 26 дек. 2011 то получается выводится декабрьское сообшение первым

  Ответить  
 
 автор: cheops   (03.02.2012 в 18:16)   письмо автору
 
   для: Василий   (03.02.2012 в 18:13)
 

О преобразовании столбца к календарному типу MySQL не может быть и речи? :) Допускается ли вариант выгрузки всех данных в массив с их последующей сортировкой? Или нужно все решить средствами MySQL?

  Ответить  
 
 автор: Василий   (03.02.2012 в 18:17)   письмо автору
 
   для: cheops   (03.02.2012 в 18:16)
 

честно говоря, знаний моих недостаточно чтобы выбрать лучший вариант.
меня интересует конечный результат
вот так у меня выводятся сообщения по дате
<?php
$result 
mysql_query("SELECT * FROM comm WHERE
 post='" 
mysql_real_escape_string($id) . "' ORDER BY date DESC, id"$db);
if(
mysql_num_rows($result) > 0)
{
$comment mysql_fetch_array($result);
do
{
$text $comment["text"];
$author $comment["author"];
$date $comment["date"];

printf("<div id='resultid'></div>
       <div class='comment-content2'>
       <h6>%s</h6>
       <p>%s</p>
       <p>%s</p>
       </div> 
       "
,$author,$date,$text);
}
while (
$comment mysql_fetch_array($result));
}

?>


может проще тут что-то поменять
//Если нет ошибок добавляем в базу  
if($error=="no"){
    $date = date("d-m-Y в H:i");
    $result2 = mysql_query("INSERT INTO comment_ege (post,author,text,date) 
VALUES ('" . mysql_real_escape_string($id) . "','"
 . mysql_real_escape_string($author) . "','" . mysql_real_escape_string($text) . "','$date')");
    //****

  Ответить  
 
 автор: cheops   (03.02.2012 в 18:26)   письмо автору
 
   для: Василий   (03.02.2012 в 18:17)
 

А как долго скрипт работает? Нет возможно вместо date - varchar(30) использовать в таблице что-то более подходящее для хранения даты?

  Ответить  
 
 автор: Василий   (03.02.2012 в 18:34)   письмо автору
 
   для: cheops   (03.02.2012 в 18:26)
 

ну там всего около 40 сообщений. можно и ручками все поменять.
что будем делать? )))

  Ответить  
 
 автор: ladan   (03.02.2012 в 18:55)   письмо автору
 
   для: Василий   (03.02.2012 в 18:34)
 

у меня дата записывается так
$date = date("d.m.Y в H:i");


а потом при запросе сортирую по дате в обратном порядке

mysql_query("SELECT * FROM table ORDER BY date DESC");

  Ответить  
 
 автор: cheops   (03.02.2012 в 19:02)   письмо автору
 
   для: ladan   (03.02.2012 в 18:55)
 

Это все-равно приведет к ошибке, при переходе с месяца на месяц или с года на год рано или поздно проявится.

  Ответить  
 
 автор: ladan   (03.02.2012 в 19:13)   письмо автору
 
   для: cheops   (03.02.2012 в 19:02)
 

у меня ошибок не было, менял дату на 2013 год и все нормально пашет :)

  Ответить  
 
 автор: cheops   (03.02.2012 в 19:17)   письмо автору
 
   для: ladan   (03.02.2012 в 19:13)
 

Когда у вас даты будут в рамках одного месяца (пусть и с разными годами) да, когда у вас данные из разных месяцев и лет накопятся - будет весело :))) Лучше не экспериментируйте, эта мина взрывается неизбежно. Не говоря про то, что у вас лишние данные хранятся, который пусть чуть-чуть но утяжеляют/замедляют таблицу.

  Ответить  
 
 автор: ladan   (03.02.2012 в 19:33)   письмо автору
 
   для: cheops   (03.02.2012 в 19:17)
 

а что лучше TIMESTAMP или DATETIME(и прописывая при вставке в таблицу NOW())?

  Ответить  
 
 автор: cheops   (03.02.2012 в 19:37)   письмо автору
 
   для: ladan   (03.02.2012 в 19:33)
 

У TIMESTAMP есть особенность, это поле автоматически обновляется при выполнении оператора UPDATE, причем обновляется по дебильному, если у вас два таких поля - обновится только одно (может сейчас поправили). Поэтому если хотите просто хранить дату без затей, то храните её в DATETIME. Если хотите скорости, то храните дату в INT, используя для формирования текущей даты функцию time(). Такое поле в дальнейшем можно будет без труда проиндексировать, да и места оно меньше занимает по сравнению с DATETIME (правда вы не сможете напрямую задействовать возможности MySQL в области времени). Какой бы вариант вы не выбрали, любой из них будет лучше голых строк (и в конечном счете удобнее).

  Ответить  
 
 автор: ladan   (03.02.2012 в 21:29)   письмо автору
 
   для: cheops   (03.02.2012 в 19:37)
 

спасибо, остановлюсь на DATETIME :)

  Ответить  
 
 автор: Sfinks   (07.02.2012 в 14:29)   письмо автору
 
   для: cheops   (03.02.2012 в 19:37)
 

> это поле автоматически обновляется при выполнении оператора UPDATE
Только если установлено свойство on update CURRENT_TIMESTAMP

> обновится только одно (может сейчас поправили)
не поправили. on update CURRENT_TIMESTAMP может быть по прежнему только у одного поля. Так же как значение по умолчанию CURRENT_TIMESTAMP.

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

>ну там всего около 40 сообщений. можно и ручками все поменять.
>что будем делать? )))
Введите поле DATETIME и храните дату в нем - оно не даст вам использовать неправильную дату и всегда будет корректно сортироваться, плюс вы получите мощную поддержку в области времени со стороны MySQL (а у MySQL действительно очень хорошие средства для операций с датами и временем).

  Ответить  
 
 автор: Василий   (03.02.2012 в 23:29)   письмо автору
 
   для: cheops   (03.02.2012 в 19:04)
 

создал поле date1 (формат datetime)
старое поле - date 04-10-2011 в 19:27
новое поле имеет следующее значение date1 2011-10-04 19:27:00

  Ответить  
 
 автор: Василий   (03.02.2012 в 23:30)   письмо автору
 
   для: Василий   (03.02.2012 в 23:29)
 

как прописать этот по новому?
//Если нет ошибок добавляем в базу   
if($error=="no"){ 
    $date = date("d-m-Y в H:i"); 
    $result2 = mysql_query("INSERT INTO comment_ege (post,author,text,date)  
VALUES ('" . mysql_real_escape_string($id) . "','" 
 . mysql_real_escape_string($author) . "','" . mysql_real_escape_string($text) . "','$date')"); 
    //****

  Ответить  
 
 автор: nmahkamov   (04.02.2012 в 11:17)   письмо автору
 
   для: Василий   (03.02.2012 в 23:30)
 

Это же очень просто. Вместо $date = date("d-m-Y в H:i"); пропишите $date = date("Y-m-d H:i:s");
Вот подробный код:

//Если нет ошибок добавляем в базу    
if($error=="no"){  
    $date = date("Y-m-d H:i:s");  
    $result2 = mysql_query("INSERT INTO comment_ege (post,author,text,date)   
VALUES ('" . mysql_real_escape_string($id) . "','"  
 . mysql_real_escape_string($author) . "','" . mysql_real_escape_string($text) . "','$date')");  
    //****

  Ответить  
 
 автор: Sfinks   (07.02.2012 в 14:24)   письмо автору
 
   для: Василий   (03.02.2012 в 23:30)
 

<?
if($error=="no"){  
    
$result2 mysql_query("INSERT INTO comment_ege (post,author,text,date)   
VALUES ('" 
mysql_real_escape_string($id) . "','"  
 
mysql_real_escape_string($author) . "','" mysql_real_escape_string($text) . "', NOW() )");  
    
//****
так по-моему еще проще. Хотя я все время с TIMESTAMP работаю, не знаю как там себя DATETIME ведет.

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

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