我有这个数组:
$keys = Array(79, 68, 80, 78, 71, 69, 77, 82, 83, 70, 76, 74, 75)
然后我使用这个数组在我的数据库中进行查询:
$dbh = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$stmt = $dbh->prepare("SELECT *
FROM table
WHERE id IN (" . implode(',', array_map('intval', $keys)) . ")");
$stmt->execute();
但是回应结果,就像......
while( $row = $stmt->fetch() ) {
echo $row['id'] . '<br />';
}
...给我:
69
70
71
74
75
76
77
78
79
80
81
82
83
即,结果按升序排序。但我需要将结果排序为原始数组$ keys(它代表一个顶级列表)。这可能吗?
答案 0 :(得分:4)
使用IN
不会对结果进行排序。它仅选择与您的查询匹配的记录。如果您希望结果按顺序排列,则需要在查询中添加ORDER BY FIELD()
子句。
$keyString = implode(',', array_map('intval', $keys));
$stmt = $dbh->prepare("SELECT *
FROM table
WHERE id IN (" . $keyString . ")
ORDER BY FIELD(id, " . $keyString . ")");
答案 1 :(得分:1)
您必须为查询定义自定义排序
$orderstr="ORDER BY CASE id ";
for($i=0;$i<sizeof($keys);$i++)
{$orderstr.="WHEN ".$keys[$i]. "Then".$i. "\n";}
$orederstr.="END";
然后您可以在查询中使用$orderstr
来订购