2017-05-30 9 views
1

Ich habe eine Abfrage wie:Kundenspezifischer Auftrag mit mehreren Spalten

SELECT * 
FROM table1 
WHERE (table1.first_key, table1.second_key) IN ((2, 1), (1, 1), (2, 2)); 

Ich möchte das Ergebnis es die Ordnung des IN (....) Inhalt haben.

Wenn es nur eine Spalte, war ich genutzt haben könnte:

ORDER BY FIELD(table1.first_key, 1, 5, 4, 7) 

ich nicht herausfinden, wie das gleiche Ergebnis haben, mit mehreren Spalten in einer guten Art und Weise MySQL.

Hier ist mein Bestes versuchen, so weit, es funktioniert, aber auf riesigen Tisch langsam sein:

SELECT CONCAT(first_key, "_", second_key) AS string_hack, first_key, second_key,.... 
FROM table1 
WHERE (first_key, second_key) IN ((2, 1), (1, 1), (2, 2)) 
ORDER BY FIELD(string_hack, "2_1", "1_1", "2_2") 

Das funktioniert, aber es stinkt.

Es muss einen besseren Weg geben

Antwort

1

Nichts schnell sein wird und Ihr Ansatz kann durchaus sinnvoll sein. Sie brauchen keine Spalte namens string_hack. Sie können einfach tun:

ORDER BY FIELD(CONCAT_WS('_', first_key, second_key), 
       '2_1', '1_1', '2_2; 
      ) 

Sie auch interessieren könnten zu JOIN Schalt:

SELECT t1.* 
FROM table1 t1 JOIN 
    (SELECT 1 as ordering, 2 as key1, 1 as key1 UNION ALL 
     SELECT 2, 1, 1 UNION ALL 
     SELECT 3, 2, 2 
    ) keys 
     ON t1.first_key = keys.key1 AND t1.second_key = keys.key2 
ORDER BY keys.ordering; 
+0

Interessanter Ansatz. –

Verwandte Themen