MySQL множественный столбец asc заказ - PullRequest
12 голосов
/ 30 января 2012

Я пытаюсь выполнить этот запрос в порядке возрастания:

SELECT title,project_index 
FROM projectdetail  
WHERE project_index BETWEEN 1 AND 6 
ORDER BY title, project_index ASC;

Мне нужны два столбца в порядке возрастания, но приведенный выше запрос возвращает результаты только с одним столбцом в порядке ASC.

Ответы [ 8 ]

28 голосов
/ 30 января 2012

В порядке возрастания по умолчанию для большинства (если не для всех) СУБД, так что ваше утверждение выглядит как странно в этом отношении, но, тем не менее, вы можете указатьпорядок для каждого отдельного столбца, добавив к нему спецификатор ASC или DESC.

Тогда ваше утверждение станет

SELECT  title
        , project_index 
FROM    projectdetail 
WHERE   project_index BETWEEN 1 AND 6 
ORDER BY 
        title ASC
        , project_index ASC

Редактировать

Как уже упоминалось @Arvo & @Dems, в настоящее время вы сортируете first на title и идентичные заголовки на project_index.Если вы хотите, чтобы ваш project_index был отсортирован первым, вы должны сначала поместить его в предложение ORDER BY.

Тогда ваше утверждение станет

SELECT  title
        , project_index 
FROM    projectdetail 
WHERE   project_index BETWEEN 1 AND 6 
ORDER BY 
        project_index ASC
        , title ASC

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

SELECT  title
        , project_index 
FROM    projectdetail 
WHERE   project_index BETWEEN 1 AND 6 
ORDER BY 
        project_index
        , title
4 голосов
/ 30 января 2012

Если вы используете mysql, отметьте this out.

Как там говорят, вы можете использовать SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

3 голосов
/ 16 октября 2016

ORDER BY title ASC, index_index ASC;

 SELECT title,project_index 
 FROM projectdetail  
 WHERE project_index BETWEEN 1 AND 6 
 ORDER BY title ASC, project_index ASC;

И вы можете добавить больше столбцов, таких как ORDER BY col1 ASC, col2 ASC, col3 DESC;

0 голосов
/ 21 февраля 2017

Использование

    ORDER BY title ASC,project_index ASC 

вместо

    ORDER BY title, project_index ASC;

отдайте заказ отдельно для обоих, тогда он будет работать правильно.

0 голосов
/ 19 августа 2015

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

SELECT lat,lon, title, zip, city, state, region,cantone 
FROM company 
WHERE title != '' AND state IN(1,3,4,5,6,7,9,2) 
ORDER BY state=2,title asc

В приведенном выше запросе сначала будут показаны все заголовки в порядке возрастания, за исключением состояния = 2, а затем показаны все записи с состоянием = 2 в последнем.

0 голосов
/ 04 января 2014

Вы можете попробовать с нижеприведенным и проверить -

SELECT title,project_index 
FROM projectdetail  
WHERE project_index BETWEEN 1 AND 6 
ORDER BY title, project_index
0 голосов
/ 04 января 2014

Попробуйте это:

SELECT title, project_index 
FROM projectdetail  
WHERE project_index BETWEEN 1 AND 6 
ORDER BY project_index, title;
0 голосов
/ 04 января 2014

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

SELECT title,project_index FROM projectdetail  
    WHERE project_index BETWEEN 1 AND 6 ORDER BY title, project_index ASC;

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

...