2010-04-06 1 views
1

Я использую таблицу с полями Builton и Lastmodifiedon, я должен сначала отобразить вновь добавленную запись на основе createdon, а затем записями lastmodifiedon с использованием mysql. Я попытался добавить «ORDER BY Createdon, Lastmodifiedon desc» в конце запроса, но только сортировка на основе первого столбца. Любой, пожалуйста, помогите в этом выпускеПорядок Mysql с использованием двух столбцов

Спасибо.

+0

Возможный дубликат http://stackoverflow.com/questions/514943/php-mysql-order-by-two-columns, http://stackoverflow.com/questions/2051162/sql-multiple-column-ordering. См. Также http://stackoverflow.com/questions/2099923/how-do-i-order-by-multiple-columns-in-a-select-query – outis

+0

Можете ли вы предоставить несколько примеров данных и то, как вы захотите появиться и как он на самом деле появляется? – Amadiere

ответ

0

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

ORDER BY Вы используете то, что обычно используется и в основном работает в соответствии с посылкой, которую он будет заказывать первым в списке, и если он найдет два одинаковых, он будет заказывать второй в списке. Нормальным хорошим примером является имя & фамилия. Если вы закажете по фамилии, вы получите потенциально два «Смита», и в этот момент вы должны заказать по первому, чтобы Алекс появился перед Шериданом.

В вашем примере вы хотите заказать по CreatedOn, а затем ModifiedOn. Он будет заказывать по дате создания, и если бы два были созданы в одно и то же время (или только дата), тогда они будут сортировать их по Модифицированной дате.

Решение? Хорошо, если вы сохраните свои данные в порядке, так что ModifiedOn пуст, тогда вы можете перевернуть сортировку и сделать что-то вроде: ORDER BY ModifiedOn, CreatedOn. Тем не менее, это оставляет вас одним маринованным: ваши ModifiedOn даты должны будут начинаться с самого старого, поскольку пустая дата считается старой датой (что-то вроде 1/1/1970). Думаю, перевернуть это правильно - это более чем простой порядок. Для того, чтобы предложить лучший ответ будет поэтому, вероятно, потребуется немного данных, чтобы убедиться, что запрос является правильным :)

3

Вы разбирают Createdon в порядке возрастания, поэтому новые записи появляются в конце:

ORDER BY Createdon,Lastmodifiedon desc 

You необходимо:

ORDER BY Createdon DESC, Lastmodifiedon DESC 
1

Это общая проблема с сортировкой по столбцам по дате. Поскольку столбец даты обычно включает время, точное с точным разрешением (иногда миллисекунды), что-либо позже в порядке сортировки эффективно игнорируется, потому что вероятность получения двух идентичных элементов в первый день для большинства приложений слишком низкая, чтобы увидеть, что это эффект.

Что вам нужно сделать, так это усечь начальную дату до разрешения, которое вам нравится (например, 1 день), и закажите на , что, после чего вы получаете одинаковые предметы в ORDERING и своем вторая статья вступает в игру.

Я не знаю MySQL достаточно хорошо, чтобы знать точный синтаксис для этого здесь, но на SQL Server, самый простой способ я знаю, что бы

SELECT * FROM Table 
ORDER BY FLOOR(CAST(CreatedOn AS Float)), LastModifiedOn DESC 

Который даст вам разрешение 1 день - причина в том, что даты SQL Server при преобразовании в float дают целочисленную часть, которая представляет день. Если вы хотите другое разрешение, вы можете использовать DATEADD и DATEDIFF в инструкции ORDER BY или преобразовать дату в строку в формате сортировки ASCII (например, YYYYMMDD hhmmss) и усечь в соответствующем месте.

0

Если LastModifiedOn имеет начальное значение NULL, когда запись вновь созданного, сделайте следующее:

ORDER BY 
    -- 1 displays first the newly created, 2 displays all modified in last order 
    CASE WHEN LastModifiedOn IS NOT NULL THEN 2 ELSE 1 END, 

    COALESCE(LastModifiedOn, CreatedON) DESC 
0

Я использовал created и lastmodified дата такое же значение при добавлении новой записи и используется order by lastmodified desc при показе в сетке , Спасибо за весь ваш ответ.

Смежные вопросы