ЗАКАЗАТЬ ПО ДАТЕ DESC dmY - PullRequest
       2

ЗАКАЗАТЬ ПО ДАТЕ DESC dmY

0 голосов
/ 15 декабря 2011

EDIT Формат в Excel-файле .csv для даты был 15-12-2011, а в базе данных MySQL phpmyadmin тип столбца был установлен на DATE, поэтому, если я импортировал файл, все данные в столбце даты изменились на 0000-00-00. Я сделал следующее, чтобы это исправить, зашел в файл .csv, выбрал столбец для даты и изменил формат на «Африка», чтобы он менял все с d-m-Y на Y-m-d. Так что в .csv это станет 2011-12-15 вместо 15-12-2011. После повторного импорта дата была правильно импортирована, не обращаясь к 0000-00-00.

После этого я изменил ORDER BY в index.php:

$query = mysql_query("SELECT * FROM `newitems` ORDER BY startVisible DESC LIMIT $start, $per_page");

После этого я изменил формат даты, где это было необходимо.

Available from: <?php 
                        $timestamp = strtotime($query_row["startVisible"]);
                        echo date("d-m-Y", $timestamp);
                        ?>

Эти сценарии сначала изменят порядок на 1.год 2.месяц 3.день и после этого изменят формат так, чтобы он отображался 15-12-2011 вместо 2011-12-15 (как он сохраняется в базе данных )

Надеюсь, это поможет другим с такой же проблемой.

Приветствие.

ниже = вопрос, который я задал

Я экспортировал таблицу и изменил некоторые вещи, которые нужно было изменить. Затем я попытался снова импортировать их в таблицу, но startVisible Тип столбца был установлен на дату. Все мои даты хранятся как 0000-00-00. Все мои даты в CSV-файле похожи на 15-12-2011. Я изменил тип столбца на varchar, и после этого я мог импортировать файл csv со всем, так как 15-12-2011 я хотел отсортировать все по дате в www.domain.com/index.php. Это потому, что тип столбца не установлен в DATE. Поэтому я снова изменил тип столбца с VARCHAR на DATE, и все даты изменились на 0000-00-00. Поэтому, что бы я ни делал, все изменилось на 0000-00-00. Я удалил все и импортировал тот же файл и все даты, которые были импортированы правильно. Так что это может быть сбой загрузки MySQL или что-то в этом роде.

Я использовал:

$query = mysql_query("SELECT * FROM newItems ORDER BY startVisible DESC LIMIT $start, $per_page");

Но все даты сейчас смешаны. Он должен замкнуть их на d-m-Y, но не делает этого.

9-8-2011
9-3-2011
8-3-2011
7-6-2011
7-3-2011
7-11-2011
6-7-2011

Теперь все отсортировано правильно, но я хочу изменить порядок отображения с 2011-12-15 на 15-12-2011. (Я имею в виду на веб-сайте не в MySQL). в index.php я хочу показать все как d-m-Y, но я все еще хочу отсортировать (ORDER BY) их правильно. Как это сделать?

Спасибо
F4LLCON

Ответы [ 6 ]

2 голосов
/ 15 декабря 2011

Вы можете попробовать функцию MySQL STR_TO_DATE. Вот пример запроса.

SELECT STR_TO_DATE (dt, '% d-% m-% Y') AS fmtDate, dt ОТ test.text ORDER BY fmtDate

Прасад.

1 голос
/ 15 декабря 2011

Вы можете обновить столбцы, используя STR_TO_DATE

Сделайте это.

  1. Преобразовать и обновить столбцы, используя STR_DO_DATE 1
  2. Измените тип столбца на дату.
1 голос
/ 15 декабря 2011

Тип в настоящее время varchar, поэтому он будет использовать сортировку текста.

Мой совет - добавить столбец в таблицу типа date, заполнить его, преобразовав строки даты в правильные даты, используя str-to-date () и затем сортируйте по этому столбцу.(Чтобы действительно сделать dmy, вам, вероятно, придется использовать

ORDER BY day(datecolumn) desc, month(datecolumn) desc, year(datecolumn) desc

Но вы уверены, что не имеете в виду ORDER BY datecolumn DESC - сначала самое последнее?

1 голос
/ 15 декабря 2011

Это потому, что запрос теперь упорядочен по столбцу varchar, поэтому он отсортирован по алфавиту, поэтому попробуйте преобразовать его в дату, прежде чем упорядочить запрос с ним следующим образом:

1 голос
/ 15 декабря 2011

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

0 голосов
/ 15 декабря 2011

Возможно, будет полезно создать функцию (или триггер) и использовать ее, когда вам нужно:

DROP FUNCTION IF EXISTS makedate;

CREATE FUNCTION makedate(your_field VARCHAR(10)) RETURNS DATE DETERMINISTIC
RETURN 
DATE_FORMAT(STR_TO_DATE(your_field, '%d/%m/%Y' ) , '%Y-%m-%d' );

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...