Mysql 具有多列的自定义订单

Mysql 具有多列的自定义订单,mysql,sql,Mysql,Sql,我有一个类似这样的问题: SELECT * FROM table1 WHERE (table1.first_key, table1.second_key) IN ((2, 1), (1, 1), (2, 2)); 我想让结果按(…)内容的顺序排列 如果只有一列,我可以使用: ORDER BY FIELD(table1.first_key, 1, 5, 4, 7) 我不知道如何以一种好的方式对多个列产生相同的结果 这是我迄今为止最好的尝试,它有效,但在巨大的桌子上会很慢: SELECT CON

我有一个类似这样的问题:

SELECT *
FROM table1
WHERE (table1.first_key, table1.second_key) IN ((2, 1), (1, 1), (2, 2));
我想让结果按(…)内容的顺序排列

如果只有一列,我可以使用:

ORDER BY FIELD(table1.first_key, 1, 5, 4, 7)
我不知道如何以一种好的方式对多个列产生相同的结果

这是我迄今为止最好的尝试,它有效,但在巨大的桌子上会很慢:

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")
这很管用,但很臭


一定有更好的方法

没有什么事情是快的,你的方法可能很合理。您不需要有一个名为
string\u hack
的列。您只需执行以下操作:

ORDER BY FIELD(CONCAT_WS('_', first_key, second_key),
               '2_1', '1_1', '2_2;
              )
您也可以考虑切换到代码>连接< /代码>:

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;

有趣的方法。