1

私はこの配列を持っています:

$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 のように結果をソートする必要があります (これはトップ リストを表します)。これは可能ですか?

4

2 に答える 2

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 . ")"); 
于 2013-06-30T17:12:18.817 に答える
1

クエリのカスタム順序を定義する必要があります

 $orderstr="ORDER BY CASE id ";
    for($i=0;$i<sizeof($keys);$i++)
    {$orderstr.="WHEN ".$keys[$i]. "Then".$i. "\n";}
    $orederstr.="END";

次に$orderstr、クエリで使用して注文できます

于 2013-06-30T17:18:51.187 に答える