2012-04-05 9 views
2

データベースの行セットを選択するために使用するIDを持つ配列があります。MySqlクエリが返された配列が入力配列のように順序付けされていない

選択がうまく行くが、私は注文した特定の配列に戻って私の結果を受け取るいけない

挿入配列(の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の結論だと思う、最初に撮影され、その後、彼はちょうど彼が最初にアレイの中にいるものを見つける人を取る?これをより厳密にして、クエリが配列の順序を変更しないようにするにはどうすればよいですか?

ありがとうございます。 ニック

+0

イムZendの精通が、SELECT文は私が順序を知っているが、あなたが見ることができるよう、私はすでに注文されたアレイを作成し – OneThreeSeven

答えて

1

Mysql FIELD関数が機能します。

$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 
+0

私が必要とするものは、ありがとう! :-) – directory

0

クエリを行うと、あなたはORDER BY

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

で結果を注文することができ、私はZendのに慣れていないんだけど、私は->order('file.id')が仕事をすることができると思います。

Zend documentation

+0

BY ORDERが欠落しているように、それは私には見えません(フォームsphinxSearchています)だから私は結果を配列に戻したいと思っています。 – directory

+0

私は、クエリの 'IN '部分があなたの配列の順序を入れていると確信しています。 'ksort()'やPHPの他の配列ソート関数の1つで結果を後で並べ替えることができます。 –

+0

はい、今は配列の順序を無視していると思います。配列を検索するための最も効率的な方法を作成すると思います。キーがまだ同じで、値が正常な順序でないため、ksort()はオプションではありません。 – directory

0

は、基礎となるコードがやっているだろうかを考えてみてください。

idでほぼ確実に並べられているファイルと、それがあなたの配列の中にある場合、いくつかの順番に異なる順序でテストされています。

$ array内の項目の順序は、要求とは全く関係がありません。問題のある項目はすべて存在しているかどうかは関係ありません。

+0

なぜそれは無関係ですか? sphinxSearchの配列結果をこの配列で取得します。検索結果を取得するために1ページ分のクエリを1回行うことができます。これは、印刷するフィニッシングラインから1ステップだけ離れています。結果(私は今すぐ見て分かりやすいようにidだけを出力します)。 – directory

+0

SQlの機能とは無関係です。あなたが望むものを得るためには、操作を逆にしなければならないのは、テーブルから選択する配列の配列から選択することです。これは難しいでしょう。 –

関連する問題