ЛЕНТА НОВОСТЕЙ

Сортировка дат в MySQL

Когда я сортирую сообщения по самой последней дате/времени, используя ORDER BY date_time DESC, иногда он сортирует его правильно, а иногда нет. Итак, есть ли лучший способ захвата данных, чтобы сортировка была выполнена правильно? Например, выполните десять записей в строке, которые он может сортировать правильно, то есть сначала отобразятся последние сообщения. Затем после этого он может поставить самый последний в самом низу

Согласен, @Aaron. Аарон. @Aaron.OP, можете ли вы предоставить простой контрольный пример, чтобы повторить вашу проблему?

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

Было бы очень полезно, если бы вы могли опубликовать образец схемы базы данных. Что важно, какой тип поля это значение даты, в котором оно хранится? Функции сортировки даты в MySQL довольно надежны при использовании в сочетании с полем типа даты — сбой этих функций для правильной сортировки станет серьезной ошибкой для mySQL. Поскольку это, вероятно, не так, нам нужно больше деталей из вашего конкретного проекта.

Каков тип данных этого поля в PHP, и как вы храните эти строки даты? Вы анализируете их в PHP или позволяете MySQL справиться с этим?

Пожалуйста, предоставьте таблицу DDL, чтобы мы могли видеть столбец, типы данных, ограничения и т. Д.

Хранение даты в поле varchar — очень плохая идея. Одна из причин, которую вы только что узнали для себя. Измените таблицу и сохраните ее в столбце date и у вас не возникнет проблем с сортировкой

Смотрите ответы ниже. Вам следует изменить тип поля или использовать CAST для его преобразования. Сортировка даты в mySQL точна, когда поле имеет правильный тип.

4 ответа

В ходе обсуждения OP вы сохраняете дату в виде строки. MySQL имеет много функций сортировки по датам, которые могут сортироваться точно, но их необходимо использовать в сочетании с полем типа DATE. Вы должны либо преобразовать тип поля в date/datetime, либо выполнить функцию cast , чтобы превратить их в типы даты для целей сортировки. Вот так:

SELECT CAST(datefield as date) AS date_format ORDER BY date_format DESC 

Вы должны использовать поле DATETIME вместо поля VARCHAR для хранения дат.

Это позволит вам правильно сортировать, а также использовать функции MySQL datetime в запросах в ваших полях datetime.

Основываясь на том, что поле является varchar, я предполагаю, что вы получаете ASCII-тип строк в поле. Если порядок сортировки не такой, как вы ожидаете, проверьте такие вещи, как верхний и нижний регистр и т.д.

Читайте также:  Java save dialog swing

Если вы хотите отсортировать даты, лучше использовать тип данных datatime.

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

Возможно, я бы создал новое поле времени данных и запустил обновление, чтобы скопировать значение varchar из старого поля в поле времени данных. Вы должны будете выполнить to_date () и затем проверить данные. Позже, однажды обрадовавшись своей работе, бросьте старое поле.

Записываете ли вы дату в этом формате или используете какую-либо функцию, например time()? Если вы сортируете по дате, которая состоит из двух символов и цифр, а не только с числовым приращением, это приведет к проблемам при сортировке записей.

Пожалуйста, исправьте меня, если я понял, что вы ошибаетесь.

edit: если вы хотите избежать дополнительной нагрузки на сервер, вы можете создать поле varchar, которое содержит обработанную дату (тот, который у вас есть сейчас), и новый int, который вы можете использовать для сохранения времени(); и сортировка записей по дате.

Источник

Сортировка в MySQL

В этой статье приведены примеры использования оператора ORDER BY для сортировки записей в MySQL.

Синтаксис оператора ORDER BY:

SELECT * FROM `table` ORDER BY `столбец` [ASC | DESC]

Направление сортировки

ASC – (по умолчанию, необязательный). Сортирует набор в порядке возрастания или по алфавиту.

SELECT * FROM `table` ORDER BY `name` ASC

DESC – сортирует в порядке убывания.

SELECT * FROM `table` ORDER BY `name` DESC

Сортировка по нескольким столбцам

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

SELECT * FROM `table` ORDER BY `name` DESC, `text` DESC

Сортировка по определенной последовательности

С помощью функции FIELD() можно получить записи из БД в нужной последовательности, например вывести первыми записи с определенными `id` .

SELECT * FROM `table` ORDER BY FIELD(`id`, 1,2,3)

Также можно скомбинировать сортировку из нескольких полей и показать первыми приоритетные записи, а далее по алфавиту.

SELECT * FROM `table` ORDER BY FIELD(`id`, 1,2,3) DESC, `name`

Или убрать в конец ненужные записи:

SELECT * FROM `table` ORDER BY FIELD(`id`, 55), `name`

Сортировка по цене, но исключая нулевые значения

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

SELECT * FROM `table` ORDER BY IF(`price` > 0, 0, 1), `price`

Сортировка по данным из другой таблицы

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

SELECT *, (SELECT COUNT(*) FROM `prods` WHERE `brand_id` = `brands`.`id`) AS `prod_count` FROM `brands` ORDER BY `prod_count` DESC

Сортировка в случайном порядке

SELECT * FROM `table` ORDER BY RAND()

Сортировка дат

Проблема возникает если даты хранятся в текстовом виде (например 23.09.2020). Если отсортировать таблицу по такому полю, то результате будут перепутаны месяцы.

Даты хранятся в текстовом виде varchar MYSQL

Текстовую дату нужно перевести в тип datetime c помощью функции STR_TO_DATE() , указав нужный формат:

SELECT *, STR_TO_DATE(`date`, '%d.%m.%Y') AS `tmp_date` FROM `table` ORDER BY `tmp_date` DESC

Проблема с тапами данных

Если в сортируемом поле содержатся одновременно текст и цифры, а нужно отсортировать только по цифрам, то данные нужно привести к числовому типу:

SELECT *, CAST(`name` AS SIGNED) AS `name_tmp` FROM `table` ORDER BY `name_tmp`
SELECT * FROM `table` ORDER BY CAST(`name` AS SIGNED)
SELECT * FROM `table` ORDER BY CAST(`name` AS DECIMAL(11,2))

Сортировка по количеству символов

SELECT * FROM `table` ORDER BY CHAR_LENGTH(`name`) DESC

Источник

Читайте также:  Глобальные переменные php битрикс

Сортировка по дате

У меня есть список новостей, который выводится в цикле. Новости содержаться в базе. мне надо сделать возможность выбора сортировки по автору и дате выхода, т.е надо сделать 2 кнопки, по нажатию на которые происходила бы нужная сортировка. Покажите какой-нибудь минимальный пример

Сортировка по дате
Вывод данных в таблицу. Как сделать так, чтобы при выводе они сортировались по дате (от высшего к.

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

Сортировка по дате
$result = mysql_query(‘SELECT * FROM `login` WHERE `user_id`=’.$_GET.’ GROUP BY `user_agent`,`ip`.

Сортировка по дате
Всем привет! Хочу вывести последние поступления в магазин делаю вот такой запрос: select.

if ($_POST['first_knopka']) { $q = "SELECT * FROM имя_твоей_таблицы ORDER BY имя_поля_даты"; // дальнейшие действия } elseif ($_POST['second_knopka']) { $q = "SELECT * FROM имя_твоей_таблицы ORDER BY имя_поля_автора"; // дальнейшие действия }

Добавлено через 3 минуты
если надо чтобы выводилась последняя дата первой (то же и для автора), то в конец запроса добавь — DESC

input type='submit' name='first_knopka'> input type='submit' name='second_knopka'>
1 2 3 4 5 6 7 8 9 10 11 12
if ($_POST['first_knopka']) { $q = "SELECT * FROM news ORDER BY date"; // дальнейшие действия } elseif ($_POST['second_knopka']) { $q = "SELECT * FROM news ORDER BY author"; // дальнейшие действия form> input type='submit' name='first_knopka'> input type='submit' name='second_knopka'>] form>

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
 include ("blocks/bd.php"); /*соединение с базой*/ $result = mysql_query ("SELECT id, title, cat, short_description, author, date FROM news ",$db); if (!$result) { echo "

Запрос на выборку данных из базы не прошел. Сообщите об этом администратору по e-mail a-d-a-m-s@mail.ru
Код ошибки

"
; exit (mysql_error()); } if (mysql_num_rows ($result)>0) { $myrow = mysql_fetch_array($result); } else { echo "

Информация по запросу не может быть извлечена в таблице нет записей

"
; exit (); } ?> "> include("blocks/header.php"); ?> include ("blocks/menu.php"); ?>
if ($_POST['first_knopka']) { $q = "SELECT * FROM news ORDER BY date"; } elseif ($_POST['second_knopka']) { $q = "SELECT * FROM news ORDER BY author"; // дальнейшие действия } do { printf ("

%s'>%s

Категория:%s

%s

Дата добавления:%s

Автор:%s



"
, $myrow["id"], $myrow["title"], $myrow["cat"], $myrow["short_description"], $myrow["date"], $myrow["author"]); } while ($myrow = mysql_fetch_array ($result)); ?> include ("blocks/footer.php"); ?>

Источник

Вывод HTML-таблицы с функцией сортировки на PHP + MySQL

Несколько примеров как вывести данные из БД в таблицу и добавить к ней возможность сортировки.

Итак, простой вывод таблицы и базы:

prepare("SELECT * FROM `tours` ORDER BY `hotel`"); $sth->execute(); $list = $sth->fetchAll(PDO::FETCH_ASSOC);

Вывод:

 
Заезд Отель Курорт Тип номера Питание Цена
EUR

Результат:

Основной принцип пользовательской сортировки основан на GET параметрах, к ссылке в href добавляется параметр ?sort=xxx со значением текущей сортировки. PHP-скрипт его получает, проверяет и подставляет в SQL-запрос.

Далее рассмотрим его детально на нескольких примерах:

Сортировка в шапке таблицы

Заведем массив $sort_list с ключами и вариантами сортировки, чтобы упростить вывод ссылок заведем функцию sort_link_th() , которая будет их формировать исходя из значения переменной $_GET[‘sort’] .

 '`date`', 'date_desc' => '`date` DESC', 'hotel_asc' => '`hotel`', 'hotel_desc' => '`hotel` DESC', 'city_asc' => '`city`', 'city_desc' => '`city` DESC', 'type_asc' => '`type`', 'type_desc' => '`type` DESC', 'food_asc' => '`food`', 'food_desc' => '`food` DESC', 'price_asc' => '`price`', 'price_desc' => '`price` DESC', ); /* Проверка GET-переменной */ $sort = @$_GET['sort']; if (array_key_exists($sort, $sort_list)) < $sort_sql = $sort_list[$sort]; >else < $sort_sql = reset($sort_list); >/* Запрос в БД */ $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); $sth = $dbh->prepare("SELECT * FROM `tours` ORDER BY "); $sth->execute(); $list = $sth->fetchAll(PDO::FETCH_ASSOC); /* Функция вывода ссылок */ function sort_link_th($title, $a, $b) < $sort = @$_GET['sort']; if ($sort == $a) < return '' . $title . ' '; > elseif ($sort == $b) < return '' . $title . ' '; > else < return '' . $title . ''; > >

Вывод:

Результат:

Сортировка в виде списка

Преведущий код немного переделан:

 '`date`', 'date_desc' => '`date` DESC', 'hotel_asc' => '`hotel`', 'hotel_desc' => '`hotel` DESC', 'city_asc' => '`city`', 'city_desc' => '`city` DESC', 'type_asc' => '`type`', 'type_desc' => '`type` DESC', 'food_asc' => '`food`', 'food_desc' => '`food` DESC', 'price_asc' => '`price`', 'price_desc' => '`price` DESC', ); /* Проверка GET-переменной */ $sort = @$_GET['sort']; if (array_key_exists($sort, $sort_list)) < $sort_sql = $sort_list[$sort]; >else < $sort_sql = reset($sort_list); >/* Запрос в БД */ $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); $sth = $dbh->prepare("SELECT * FROM `tours` ORDER BY "); $sth->execute(); $list = $sth->fetchAll(PDO::FETCH_ASSOC); /* Функция вывода ссылок */ function sort_link_bar($title, $a, $b) < $sort = @$_GET['sort']; if ($sort == $a) < return '' . $title . ' '; > elseif ($sort == $b) < return '' . $title . ' '; > else < return '' . $title . ''; > >

Вывод:

 
Заезд Отель Курорт Тип номера Питание Цена
EUR

Сортировка полем select

Во этом примере управление сортировкой будет производится с помощью , при его изменении отправляется форма c выбранным ключом сортировки .

 '`date`', 'type' => '`type`', 'food' => '`food`', 'price_asc' => '`price`', 'price_desc' => '`price` DESC', ); /* Проверка GET-переменной */ $sort = @$_GET['sort']; if (array_key_exists($sort, $sort_list)) < $sort_sql = $sort_list[$sort]; >else < $sort_sql = reset($sort_list); >/* Запрос в БД */ $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); $sth = $dbh->prepare("SELECT * FROM `tours` ORDER BY "); $sth->execute(); $list = $sth->fetchAll(PDO::FETCH_ASSOC);

Вывод:

 
Дата заезда
Заезд Отель Курорт Тип номера Питание Цена
EUR

Источник

Оцените статью