[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка по дате
WisesT
Приветствую!
Сразу к делу.
Есть табличка с полями. Некоторые из них, это
`time`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,

и
`na_kogda`  date NOT NULL ,

Есть страничка, которая выводит все данные из таблицы по порядку. Запрос выглядит вот так
$result = mysql_query("SELECT *, DATE_FORMAT(`time`, '%d-%m-%Y %H:%i:%s') as `formatTime`, DATE_FORMAT(`na_kogda`, '%d-%m-%Y') as `formatTime1` FROM zakazy LIMIT $start, $num");  

А как сделать так, чтобы записи сортировались приблизительно следующим образом? (не знаю какую функцию подставить вместо "тек_дата")
$result = mysql_query("SELECT *, DATE_FORMAT(`time`, '%d-%m-%Y %H:%i:%s') as `formatTime`, DATE_FORMAT(`na_kogda`, '%d-%m-%Y') as `formatTime1` FROM zakazy WHERE `na_kogda`=>тек_дата ORDER BY `na_kogda`ASC LIMIT $start, $num");  

тоесть нужен запрос который выводил бы записи в которых "на когда"=>текущая дата и сортировала их по возрастанию от текущей даты.
Спасибо.



Спустя 2 минуты, 57 секунд (17.01.2012 - 15:18) Renden написал(а):
NOW()?

Спустя 2 минуты, 35 секунд (17.01.2012 - 15:20) asokol написал(а):
Под тек_дата подразумевается данный момент или сегодняшний день?

Спустя 4 минуты, 29 секунд (17.01.2012 - 15:25) UnWind написал(а):
Цитата

сортировала их по возрастанию от текущей даты.

Скорее всего по убыванию) Как запись в таблице, может быть выше текущей даты ? (Если сайт не гадалок и оракулов конечно же) :D

Попробуй вот так вот, как я уже и сказал, если сайт не предсказаний, то даты выше сегоднешней, в базе быть не может.
ORDER BY date


Ну если же конечно сайт гадалок, то можно использовать следующий вариант (Как было написано выше)
NOW()

Тебе в помощь. NOW - строковая функция, возвращающая текущую дату и время.
Надеюсь помог.

P.S.:> А вообще, что бы постоянно формат даты не менять - можешь воспользоваться триггерами, либо свой создать, либо в интернете готовых - куча.

Спустя 5 минут, 28 секунд (17.01.2012 - 15:30) WisesT написал(а):
Цитата (asokol @ 17.01.2012 - 12:20)
Под тек_дата подразумевается данный момент или сегодняшний день?

сегодняшняя дата. чч-мм-гггг

Спустя 2 минуты, 54 секунды (17.01.2012 - 15:33) WisesT написал(а):
Цитата (UnWind @ 17.01.2012 - 12:25)
Цитата

сортировала их по возрастанию от текущей даты.

Скорее всего по убыванию) Как запись в таблице, может быть выше текущей даты ? (Если сайт не гадалок и оракулов конечно же) :D

Попробуй вот так вот, как я уже и сказал, если сайт не предсказаний, то даты выше сегоднешней, в базе быть не может.
ORDER BY date


Ну если же конечно сайт гадалок, то можно использовать следующий вариант (Как было написано выше)
NOW()

Тебе в помощь. NOW - строковая функция, возвращающая текущую дату и время.
Надеюсь помог.

чуток запутался в твоем ответе.
Вместо тек_дата - какую функцию поставить?

Сортировку делать ASC или DESC

П.С. да и вообще. Верно ли написан синтаксис запроса?
я в этом деле недавно.

Спустя 3 минуты, 55 секунд (17.01.2012 - 15:37) UnWind написал(а):
WisesT
NOW() - она вернет текущую дату.
Насчет сортировки, я думаю скорее всего просто
ORDER BY DESC

Тебе ведь нужно их в порядке возрастания вывести, т.е. например:
Цитата

10) 10.12.2011
9) 9.12.2011
8) 8.12.2011

А не наоборот.
Если наоборот, то DESC можешь вообще убрать и оставить только ORDER BY.

В общем запрос должен получится примерно таким:
SELECT * FROM таблица WHERE date ORDER  BY NOW() DESC;

Спустя 3 минуты, 44 секунды (17.01.2012 - 15:41) WisesT написал(а):
понял. запомню. спасибо.

а синтаксис (кавычки эти....) верно написано?

Спустя 2 минуты (17.01.2012 - 15:43) asokol написал(а):

$result = mysql_query("SELECT *, FROM_UNIXTIME(`time`, '%d-%m-%Y %H:%i:%s') `formatTime`, DATE_FORMAT(`na_kogda`, '%d-%m-%Y') `formatTime1` FROM `zakazy` WHERE `na_kogda`=>CURDATE() ORDER BY `na_kogda`DESC LIMIT $start, $num;");

Спустя 1 минута, 37 секунд (17.01.2012 - 15:45) UnWind написал(а):
WisesT
Синтаксис в принципе порядке, главное дальше не испортить всё.
Я в предыдущем посте, привел тебе пример (Отредактировал), можешь ориентироваться на него.

Спустя 1 минута, 38 секунд (17.01.2012 - 15:46) UnWind написал(а):
asokol
Ну и зачем нужно было делать сравнение в WHERE ?
Если оно и так будет сортироваться в порядке убывания, а дат как я уже сказал выше нынешней - быть не может biggrin.gif

Спустя 1 минута, 46 секунд (17.01.2012 - 15:48) WisesT написал(а):
с запросом врод разобрались. Но что-то не выводит данные.
Скину весь код обработчика. С переделаным запросом.
<?php  
// Устанавливаем соединение с базой данных
include "config.php";

// Переменная хранит число сообщений выводимых на станице
$num = 20;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM zakazy");
$posts = mysql_result($result, 0);
// Находим общее число страниц
$total = intval(($posts - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю

if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения

$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start

$result = mysql_query("SELECT *, FROM_UNIXTIME(`time`, '%d-%m-%Y %H:%i:%s') `formatTime`, DATE_FORMAT(`na_kogda`, '%d-%m-%Y') `formatTime1` FROM `zakazy` WHERE `na_kogda`=>CURDATE() ORDER BY `na_kogda`DESC LIMIT $start, $num;");
// В цикле переносим результаты запроса в массив $postrow
while ( $postrow[] = mysql_fetch_array($result))
?>

При таком обработчике данные не выводятся. Ошибку не бьет, но пишет
Цитата
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\192.168.1.21\www\out_1.php on line 28

Спустя 1 минута, 53 секунды (17.01.2012 - 15:50) UnWind написал(а):
WisesT
Это ошибка в запросе. Сейчас в общем я поправлю.

Спустя 1 минута, 7 секунд (17.01.2012 - 15:51) asokol написал(а):
`na_kogda`=>CURDATE()
`na_kogda`>=CURDATE()

Спустя 49 секунд (17.01.2012 - 15:52) WisesT написал(а):
Нужно что бы отображалось след образом.
Допустим сегодня 17.01.2012

а "на когда" отображалось что бы так
18.01.2012
18.01.2012
21.01.2012
13.01.2012

а когда станет 19.01
заказы с датой "на когда" < сегодняшней даты - отсекались

Спустя 1 минута, 34 секунды (17.01.2012 - 15:53) UnWind написал(а):
WisesT
А ну так и нужно было объяснять)
Мы ж не настрадамусы, что бы знать - что это скрипт заказов)))

Спустя 46 секунд (17.01.2012 - 15:54) WisesT написал(а):
все. подправил.
Спасибо ребята.
финал выглядит так
$result = mysql_query("SELECT *, FROM_UNIXTIME(`time`, '%d-%m-%Y %H:%i:%s') `formatTime`, DATE_FORMAT(`na_kogda`, '%d-%m-%Y') `formatTime1` FROM `zakazy` WHERE `na_kogda`>=CURDATE() ORDER BY `na_kogda`ASC LIMIT $start, $num;");

СПС

П.С. возможно кто-то знает выход из этой ситуации

Спустя 2 минуты, 46 секунд (17.01.2012 - 15:57) UnWind написал(а):
WisesT
Ну тогда ладно.
Слушай, только переменную там у себя отфильтруй

$page = $_GET['page'];

хотя бы на

$page = !empty($_GET['page']) ? $_GET['page'] : NULL;

Спустя 19 секунд (17.01.2012 - 15:57) asokol написал(а):
UnWind, а завтра их тоже не будет? Если они будут удаляться или переноситься, то тогда не надо WHERE.

Чтобы на завтрашний день показывались заказы:
`na_kogda`>=DATE_ADD(CURDATE(), INTERVAL 1 DAY)

Спустя 2 минуты (17.01.2012 - 15:59) UnWind написал(а):
asokol
Да я сперва не понял, что дата может быть больше сегодняшней) Я же спрашивал в начале, мне никто этого не сказал smile.gif

Спустя 33 секунды (17.01.2012 - 16:00) WisesT написал(а):
Цитата (UnWind @ 17.01.2012 - 12:57)
WisesT
Ну тогда ладно.
Слушай, только переменную там у себя отфильтруй

$page = $_GET['page'];

хотя бы на

$page = !empty($_GET['page']) ? $_GET['page'] : NULL;

отказался твой код работать. жалуется на ?

Спустя 1 минута, 1 секунда (17.01.2012 - 16:01) UnWind написал(а):
WisesT
Перепиши его, там опечатки были - я только что исправил. Клавиши блин некоторые западают.

Спустя 1 минута, 45 секунд (17.01.2012 - 16:02) UnWind написал(а):
Кстати, не забываем ставить плюсики, всем кто помогал biggrin.gif

З.Ы.:> Спасибо за плюсик wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.