|
|
|
| добрый день!
у меня в поле date запись имеет такое значение 25-11-2011 в 07:22
и сортировка у меня идет, соответственно, по первому числу. и получается что сообщение 25-11-2011 ставится выше чем 20-01-2012
date - varchar(30) | |
|
|
|
|
|
|
|
для: Василий
(03.02.2012 в 18:04)
| | А в чем вопрос? Как отсортировать правильно? | |
|
|
|
|
|
|
|
для: cheops
(03.02.2012 в 18:08)
| | сортируются не верно.
надо сообщения свежие выводить первыми, а потом идут старые.
а сейчас сортирвка работает по дате.
т.е если сравнить 25 янв. 2012 и 26 дек. 2011 то получается выводится декабрьское сообшение первым | |
|
|
|
|
|
|
|
для: Василий
(03.02.2012 в 18:13)
| | О преобразовании столбца к календарному типу MySQL не может быть и речи? :) Допускается ли вариант выгрузки всех данных в массив с их последующей сортировкой? Или нужно все решить средствами MySQL? | |
|
|
|
|
|
|
|
для: 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')");
//****
|
| |
|
|
|
|
|
|
|
для: Василий
(03.02.2012 в 18:17)
| | А как долго скрипт работает? Нет возможно вместо date - varchar(30) использовать в таблице что-то более подходящее для хранения даты? | |
|
|
|
|
|
|
|
для: cheops
(03.02.2012 в 18:26)
| | ну там всего около 40 сообщений. можно и ручками все поменять.
что будем делать? ))) | |
|
|
|
|
|
|
|
для: Василий
(03.02.2012 в 18:34)
| | у меня дата записывается так
$date = date("d.m.Y в H:i");
|
а потом при запросе сортирую по дате в обратном порядке
mysql_query("SELECT * FROM table ORDER BY date DESC");
|
| |
|
|
|
|
|
|
|
для: ladan
(03.02.2012 в 18:55)
| | Это все-равно приведет к ошибке, при переходе с месяца на месяц или с года на год рано или поздно проявится. | |
|
|
|
|
|
|
|
для: cheops
(03.02.2012 в 19:02)
| | у меня ошибок не было, менял дату на 2013 год и все нормально пашет :) | |
|
|
|
|
|
|
|
для: ladan
(03.02.2012 в 19:13)
| | Когда у вас даты будут в рамках одного месяца (пусть и с разными годами) да, когда у вас данные из разных месяцев и лет накопятся - будет весело :))) Лучше не экспериментируйте, эта мина взрывается неизбежно. Не говоря про то, что у вас лишние данные хранятся, который пусть чуть-чуть но утяжеляют/замедляют таблицу. | |
|
|
|
|
|
|
|
для: cheops
(03.02.2012 в 19:17)
| | а что лучше TIMESTAMP или DATETIME(и прописывая при вставке в таблицу NOW())? | |
|
|
|
|
|
|
|
для: ladan
(03.02.2012 в 19:33)
| | У TIMESTAMP есть особенность, это поле автоматически обновляется при выполнении оператора UPDATE, причем обновляется по дебильному, если у вас два таких поля - обновится только одно (может сейчас поправили). Поэтому если хотите просто хранить дату без затей, то храните её в DATETIME. Если хотите скорости, то храните дату в INT, используя для формирования текущей даты функцию time(). Такое поле в дальнейшем можно будет без труда проиндексировать, да и места оно меньше занимает по сравнению с DATETIME (правда вы не сможете напрямую задействовать возможности MySQL в области времени). Какой бы вариант вы не выбрали, любой из них будет лучше голых строк (и в конечном счете удобнее). | |
|
|
|
|
|
|
|
для: cheops
(03.02.2012 в 19:37)
| | спасибо, остановлюсь на DATETIME :) | |
|
|
|
|
|
|
|
для: cheops
(03.02.2012 в 19:37)
| | > это поле автоматически обновляется при выполнении оператора UPDATE
Только если установлено свойство on update CURRENT_TIMESTAMP
> обновится только одно (может сейчас поправили)
не поправили. on update CURRENT_TIMESTAMP может быть по прежнему только у одного поля. Так же как значение по умолчанию CURRENT_TIMESTAMP. | |
|
|
|
|
|
|
|
для: Василий
(03.02.2012 в 18:34)
| | >ну там всего около 40 сообщений. можно и ручками все поменять.
>что будем делать? )))
Введите поле DATETIME и храните дату в нем - оно не даст вам использовать неправильную дату и всегда будет корректно сортироваться, плюс вы получите мощную поддержку в области времени со стороны MySQL (а у MySQL действительно очень хорошие средства для операций с датами и временем). | |
|
|
|
|
|
|
|
для: 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: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')");
//****
|
| |
|
|
|
|
|
|
|
для: Василий
(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')");
//****
|
| |
|
|
|
|
|
|
|
для: Василий
(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 ведет. | |
|
|
|