2017-01-03 11 views
1

Ich habe diese Tabelle:MySQL sortieren nach zwei Spalten einer Tabelle

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

Wie kann ich als nächstes erhalten:

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

Dank!

+0

Bestellnr. Willst du das? –

+0

Spalten nicht in 'id asc, for_id asc' angeordnet, er braucht das nicht, Er klärt auch nicht die Frage. – wajeeh

+0

was ist die wahre Reihenfolge, die Sie wollen? – wajeeh

Antwort

2

nicht sicher, das ist, was Sie genau wollen oder nicht, sollten Sie für das Ergebnis, um in der Post eine Erklärung tun.

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

und SQLFiddle Demo Here.

Aktualisiert:

Versuchen wieder folgende,

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

wieder aktualisiert:

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

SQLFiddle

+0

Vielen Dank, aber wenn ich einen Datensatz zur Tabelle hinzufügen, funktioniert die Abfrage nicht richtig. –

+0

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

+0

@ChooHwan Für die zusätzliche Aufzeichnung, was ist Ihr gewünschtes Ergebnis? – Blank

1

einfach order by verwenden, kann es mehr als eine Spalte

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

Wenn Sie auf den Sqlfiddle in der Frage schauen, werden Sie sehen, dass Ihre Antwort das gleiche :) – wajeeh

0

Verwenden Auftrag von und Cancat

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

Aktualisiert:

Verwenden Bestellung durch und gilt case Aussage nach Ihrem Zustand

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

[Link] (http://sqlfiddle.com/#!9/859933/23) –

+0

@ChooHwan haben Sie die Antwort bekommen du schaust nach? Wenn ja, können Sie die Antwort akzeptieren –

+0

Nein. Bitte sehen Sie sich meine Frage an. –