如何以与子句中给出的顺序相同的顺序获取查询结果

时间:2014-05-09 11:28:58

标签: php mysql

我有一个如下表,id是主键

      ID Name
      1  a
      2  b
      3  c
      4  d
      5  e 

并进行如下查询。此查询是在用户输入选项的php文件中创建的。

    select name from table where id in (1,5,3)

我得到结果(“a”,“c”,“e”),我猜这是正常的,因为默认的主键排序顺序。但是我希望结果按照与“in”子句相同的顺序排序。所以我希望返回值为(“a”,“e”,“c”)。有没有办法在mysql中获取它。

2 个答案:

答案 0 :(得分:5)

您只需使用FIELD()

即可
select name from TableName where id in (1,5,3)
ORDER BY field(id,1,5,3)

结果:

NAME
a
e
c

请参阅SQL Fiddle中的结果。

答案 1 :(得分:2)

您可以使用CASE运算符指定顺序:

SELECT * FROM table
WHERE id IN (3,6,1,8,9)
ORDER BY CASE id WHEN 3 THEN 1
                 WHEN 6 THEN 2
                 WHEN 1 THEN 3
                 WHEN 8 THEN 4
                 WHEN 9 THEN 5
         END
在php中你可以这样做:

<?php

$my_array =  array (3,6,1,8,9) ;

$sql = 'SELECT * FROM table  WHERE id IN (3,6,1,8,9)';

$sql .= "\nORDER BY CASE id\n";
foreach($my_array as $k => $v){
    $sql .= 'WHEN ' . $v . ' THEN ' . $k . "\n";
}
$sql .= 'END ';

echo $sql;

?>