2017-01-03 2 views
1

У меня есть эта таблица:MySQL сортировать по две колонки одной таблицы

CREATE TABLE table_name (id INT, for_id INT, comms VARCHAR(50)); 
    INSERT INTO table_name VALUES (1,0, 'boo'), 
            (2,1, 'John'), 
            (3,0, 'Zoe'), 
            (4,3, 'bar'), 
            (5,1, 'Don'), 
            (6,3, 'FOO'), 
            (7,1, 'Doe'); 

http://sqlfiddle.com/#!9/859933/6

Как я могу получить следующий:

1.0.'boo' 
2.1.'John' 
5.1.'Don' 
7.1.'Doe' 
3.0.'Zoe' 
4.3.'bar' 
6.3.'FOO' 

Спасибо!

+0

использовать заказ по идентификатору. Вы этого хотите? –

+0

столбцы, не упорядоченные в 'id asc, for_id asc', ему это не нужно, он также не уточняет вопрос. – wajeeh

+0

Какой реальный заказ вы хотите? – wajeeh

ответ

2

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

select * 
from table_name 
order by 
    case when for_id = 0 then concat(id, for_id) + 0 
     else concat(for_id, id) + 0 
    end 

и SQLFiddle Demo Here.

Обновлено:

Try снова следующее,

select * 
from table_name 
order by 
    case when for_id = 0 then mod(concat(for_id, id) + 0, 10) 
     else mod(concat(id, for_id) + 0, 10) 
    end 
    , id asc 

SQLFiddle

Изменено снова:

select * 
from table_name 
order by 
    case when for_id = 0 then id 
     else for_id 
    end 
    , id asc 

SQLFiddle

+0

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

+0

[SQLFiddle] (http://sqlfiddle.com/#!9/bf4c8/1) –

+0

@ChooHwan Для дополнительной записи, каков ваш желаемый результат? – Blank

1

Просто используйте order by, он может получить больше, чем один столбец

Select * from table_name 
    order by id asc, for_id asc; 
+0

если вы посмотрите на sqlfiddle в вопросе, вы увидите, что ваш ответ тот же :) – wajeeh

0

Используйте заказ и Cancat

select Concat(id,'.',for_id) as id ,comms 
from table_name 
order by id asc,for_id asc 

Обновлено:

Используйте заказ по и применить case заявление как за ваше состояние

select * 
from table_name 
order by 
    case when for_id = 0 then concat(id, for_id) + 1 
     else concat(for_id, id) + 0 
    end 

http://sqlfiddle.com/#!9/859933/25

+0

[ссылка] (http://sqlfiddle.com/#!9/859933/23) –

+0

@ChooHwan у вас есть ответ ты ищешь? Если да, вы можете принять ответ –

+0

№ Пожалуйста, посмотрите мой вопрос. –

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