PHP-以与调用相同的顺序返回mysql行


PHP - return mysql rows in same order as called

我正试图使用SELECT查询来选择3行,但我希望它们与我调用它们的顺序相同。这就是我试图做的:

$array = array("50", "23", "67");
$list = implode(",", $array);
foreach($db->query("SELECT * FROM champs WHERE id IN ($list) ORDER BY 
    DECODE(id, $array[0], 1, $array[1], 2, $array[2], 3)") as $row) {
    //Do stuff
}   

然而,我得到了:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax

有没有办法确保它总是按照我所说的顺序返回?

decode()是Oracle函数,而不是MySQL函数。您应该使用case,它在两个数据库中都有效:

SELECT *
FROM champs
WHERE id IN ($list)
ORDER BY (CASE WHEN id = $array[0] THEN 1
               WHEN id = $array[1] THEN 2
               WHEN id = $array[2] THEN 3
          END);