我有这个数组:
$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一样对结果进行排序(它表示一个顶部列表)。这可能吗?
使用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 . ")");
您必须为查询定义自定义排序
$orderstr="ORDER BY CASE id ";
for($i=0;$i<sizeof($keys);$i++)
{$orderstr.="WHEN ".$keys[$i]. "Then".$i. "'n";}
$orederstr.="END";
然后您可以在查询中使用$orderstr
来订购