2016-02-04 3 views
1

Как я могу получить восходящие результаты на основе двух столбцов mysql. Как я хочу 1,2,3,4,5 или 1,1,2,2,3,4,4,5,5, но другие значения находятся на других столбцах.По возрастанию результата на основе двух столбцов mysql

sample table 
------------- 
col1 col2 
741  0 
742  0 
743  0 
744  0 
745  743 
------------ 

Expected output 

------------- 
col1 col2 
741  0 
742  0 
743  0 
745  743 
744  0 
------------ 

при переходе через col1 и найти следующий номер на col2, чтобы он добавил на asc.

+0

как это происходит? 744 не больше 745 – Ceeee

+0

Будет ли 'col2' всегда быть ниже, чем' col1'? – shmosel

ответ

0

Вы можете использовать случай, когда в вашем заказе пунктом

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

SELECT  
FROM tablename 
ORDER BY 
    CASE 
     when col1 < col2 AND NOT col1 = 0 AND NOT col2 = 0 then col1 
     when col1 < col2 AND col1 = 0 then col2 
     when col2 < col1 AND NOT col1 = 0 AND NOT col2 = 0 then col2 
     when col2 < col1 AND col2 = 0 then col1 
    END DESC 
+0

Спасибо за ответ, но я получаю ошибку. Ответ @shmosel работает отлично. –

0

Я не могу обещать, что это будет работать во всех случаях, но он должен удовлетворять ваш пример:

SELECT col1, col2 
    FROM test 
ORDER BY IF(col2 = 0, col1, col2), col1; 

Идея состоит в том, что мы сортируем col2 в col1 для сортировки, поэтому сортировка видит ваши данные следующим образом:

741 
742 
743 
743 -- pulled from col2 
744 

Тогда фактическая col1 используется в качестве тай-брейке поставить переведенный ряд вторых, предположение о том, что будучи col1 всегда будет больше, чем col2.

+0

Спасибо @shmosel! Он работает отлично. Какой мозг. Где я могу получить документацию для этого? –

+0

@ VandolphReyes MySQL SELECT задокументирован здесь: http://dev.mysql.com/doc/refman/5.7/en/select.html – shmosel

+0

переведено для отправки комментария –

0

@shmosel. Спасибо за ответ, как он помогает. Но, как вы сказали, он не работает во всех случаях. Теперь он дает разные результаты, когда col2 имеет значение, которое уже вызывается в верхней части. Я попытаюсь объяснить это ясно.

Это новая таблица с добавленными значениями.

------------- 
col1 col2 
741  0 
742  0 
743  0 
745  0 
746  743 
747  0 
748  0 
749  0 
750  746 
751  0 
752  746 
------------ 

И вот результат, основанный на вашем первом ответе.

------------- 
col1 col2 
741  0 
742  0 
743  0 
746  743 
745  0 
750  746 
752  746 
747  0 
748  0 
749  0 
751  0 
------------ 

И то, что я ожидал это

------------- 
col1 col2 
741  0 
742  0 
743  0 
746  743 
750  746 
752  746 
745  0 
747  0 
748  0 
749  0 
751  0 
------------ 

Так с 746 (col1) имеют следующий номер на col2, поэтому он должен тот приоритет. Я забыл упомянуть, что col1 уникальны и col2, а не. col2 вставлены на основе col1. Так что это как подсчет этого. col 1, затем col2. Извините за невыясненный вопрос.

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