MySQL按数组排序

MySQL按数组排序,mysql,sql,Mysql,Sql,我有一个类似这样的MySQL脚本:SELECT id,name FROM users WHERE id IN(6,4,34) in(…)数组中的序列非常重要。可以按给定的顺序获取它们吗?您可以在ORDER BY子句中使用任何表达式,包括“CASE”: ORDER BY CASE id WHEN 6 THEN 1 WHEN 4 THEN 2 WHEN 34 THEN 3 END ASC 如果您的列表来自应用程序编程层,则可以使用以下内容(此处为PHP)构建此列表: 但是,我要

我有一个类似这样的MySQL脚本:
SELECT id,name FROM users WHERE id IN(6,4,34)


in(…)数组中的序列非常重要。可以按给定的顺序获取它们吗?

您可以在ORDER BY子句中使用任何表达式,包括“CASE”:

ORDER BY CASE id 
  WHEN 6 THEN 1 
  WHEN 4 THEN 2 
  WHEN 34 THEN 3 
END ASC
如果您的列表来自应用程序编程层,则可以使用以下内容(此处为PHP)构建此列表:

但是,我要提到的是,Joachim的回答非常优雅:-)

您可以使用来保持它的紧凑性

SELECT id, name 
FROM users 
WHERE id IN (6, 4, 34)
ORDER BY FIELD(id, 6, 4, 34);
试一试


基于Chris Trahey答案的完整示例

$ids = array("table1",  "table2", "table3");
    
$sortVal = 1;
foreach ($ids as $id_val) {
    $cases[] = sprintf("WHEN '%s' THEN %u ", $id_val, $sortVal++);
}    
$order_by = 'ORDER BY CASE `tableName` ' . implode($cases) . ' END ASC';    

$result = mysqli_query( $con, "
        SELECT DISTINCT tableName 
        FROM `table` 
        $order_by");

谢谢,但我以前不知道电话号码。我得到了带有内爆(“,”,$array)的数组。我添加了一些示例代码来展示如何构建CASE子句。
SELECT id, name FROM users WHERE id IN (6,4,34) order by FIELD(id,6,4,34)
$ids = array("table1",  "table2", "table3");
    
$sortVal = 1;
foreach ($ids as $id_val) {
    $cases[] = sprintf("WHEN '%s' THEN %u ", $id_val, $sortVal++);
}    
$order_by = 'ORDER BY CASE `tableName` ' . implode($cases) . ' END ASC';    

$result = mysqli_query( $con, "
        SELECT DISTINCT tableName 
        FROM `table` 
        $order_by");