2014-05-09 98 views
2

给我有一个表像之下,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中。

+0

您可以使用联合加入的一种方式结果是从UI端选择的订单 – avisheks

+0

是jensgram。这是一个dup。愤怒的公牛的回答也和你那边的一样。我很好奇为什么我之前没有找到它,可能是因为所有相关的关键字“mysql”,“sort”,“order”,“in”都是非常通用的。谢谢。 – John

回答

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

+2

我从来不需要使用类似的东西,我也不知道现场操作员的那种类型。很有用。 – fmgonzalez

+1

这太棒了。我从来没有真正料到它会那么容易。非常感谢。 – John

2

可以使用CASE运营商指定的顺序:

在PHP
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 

u能做到这一点,如:

<?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; 

?> 
相关问题