2

データベースから行セットを選択するために使用するIDを持つ配列があります。

選択はうまくいきますが、順序付けられた指定された配列に結果が返されません

挿入された配列(var_dump)

  0 => string '40201' (length=5)
  1 => string '44089' (length=5)
  2 => string '42106' (length=5)
  3 => string '42740' (length=5)
  4 => string '43812' (length=5)
  5 => string '44331' (length=5)
  6 => string '42109' (length=5)
  7 => string '44147' (length=5)
  8 => string '40464' (length=5)
  9 => string '42108' (length=5)

出力配列

array
  0 => 
    array
      'id' => string '40201' (length=5)
  1 => 
    array
      'id' => string '40464' (length=5)
  2 => 
    array
      'id' => string '42106' (length=5)
  3 => 
    array
      'id' => string '42108' (length=5)
  4 => 
    array
      'id' => string '42109' (length=5)
  5 => 
    array
      'id' => string '42740' (length=5)
  6 => 
    array
      'id' => string '43812' (length=5)
  7 => 
    array
      'id' => string '44089' (length=5)
  8 => 
    array
      'id' => string '44147' (length=5)
  9 => 
    array
      'id' => string '44331' (length=5)

私のzendクエリ:

    $select = $this->_db
        ->select()
    ->from(array('file' => 'filehosts'), array('id'))
    ->where('file.id IN(?)', $array);

    $result = $this->getAdapter()->fetchAll($select);
    return $result

これは、フォローアップするidの結論だと思います。最初に1つが取得され、次に、最初に見つけた配列内の1つが取得されます。クエリが配列の順序を変更しないように、これをより厳密にするにはどうすればよいですか?

前もって感謝します。ニック

4

3 に答える 3

1

MysqlFIELD関数が機能します。

$select = $this->_db->select()
->from(array('file' => 'filehosts'), array('id'))
->where('file.id IN(?)', $array)
->order(new Zend_Db_Expr('FIELD(file.id, ' . implode(',', $array) . ')'));

$result = $this->getAdapter()->fetchAll($select);
return $result
于 2012-04-05T15:24:41.087 に答える
0

クエリを実行すると、結果を次のように並べ替えることができますORDER BY

SELECT * FROM `file` WHERE `file`.`id` IN $array ORDER BY `file`.`id` ASC

私はzendに精通していません->order('file.id')が、その仕事はできると思います。

Zendのドキュメントを参照してください

于 2012-04-05T13:31:58.270 に答える
0

基礎となるコードが何をするかを考えてください。

それは、ほぼ確実にidで順序付けられたファイル内でそれらを処理し、完全に異なる順序で配列内にあるかどうかをテストします。

$ array内のアイテムの順序は、リクエストとはまったく関係ありません。重要なのは、存在するかどうかだけです。

于 2012-04-05T13:45:52.257 に答える