2017-06-16 70 views
0
CREATE TABLE users (
    id INT, 
    name TEXT 
); 

INSERT INTO users VALUES 
    (1, "John"), 
    (2, "Susan"), 
    (3, "Timothy"), 
    (4, "Robert"), 
    (5, "Jim"), 
    (6, "Patricia"); 

$var = $db->prepare(" 
    SELECT name 
     FROM users 
     WHERE id IN (3, 2, 4, 6) 
"); 
$var->execute(); 

返回结果的顺序是id出现在表中,所以“2,3,4,6”。有没有办法按WHERE ... IN条款中指定的顺序订购?使用WHERE IN子句按顺序抓取行

预期的结果将是:

+----+ 
| id | 
+----+ 
| 3 | 
| 2 | 
| 4 | 
| 6 | 
+----+ 

回答

4

你需要一个order by得到的东西秩序。一种方法是使用field()

SELECT name 
FROM users 
WHERE id IN (3, 2, 4, 6) 
ORDER BY field(id, 3, 2, 4, 6); 
2
SELECT name 
FROM users 
WHERE id IN (3, 2, 4, 6) 
order by find_in_set(id, '3,2,4,6')