2017-05-30 37 views
1

我有這樣一個查詢:多列按訂單

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

我想要的結果吧IN(....)含量的順序。

如果是隻有一列,我可以用:

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

我不知道如何有一個好MySQL的方式多列相同的結果。

這是我最好的嘗試,到目前爲止,它的工作原理,但會在巨大的錶慢:

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") 

這樣的作品,但它太臭。

必須有一個更好的辦法

回答

1

沒有任何事情要快,你的方法可能是比較合理的。您不需要有一個名爲string_hack的列。你可以這樣做:

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

您也可以考慮轉換爲JOIN

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

有趣的方法。 –