2016-12-20 7 views
0

私はそこに単純な解決策があるように感じますが、私の心は空になります。他の配列の値に基づいて配列の順序/配列をソートするクエリDB

私はそうのように、IDの配列を持っている:

//array in no particular order  
$arr1 = array(456, 5, 9, 2, 470, 3); 

、それらは私のデータベース内の行のIDの(主キー)です。私はその順序を維持しながら、それらすべての情報を得る必要があります。私はDBをうまく照会して結果を得ることができますが、私が理解できないことはその順序を維持する方法です。その結果、私は結果を反復し、この特定の順序で情報を吐き出すことができるようにしたいと考えています。

この配列でIDをソートするようにMYSQLIクエリに指示する方法はありますか?または、結果が得られたら、配列の順序を反映するために結果を並べ替える方法はありますか?

これは意味があると思います。コメント/回答があれば、事前に感謝します。

答えて

0

私は私の問題を解決することができました。

$unorderedArray = array(); 
$orderedArray = array(); 
while($a = mysqli_fetch_assoc($r)) { 
    array_push($unorderedArray, $a); 
} 
for($i = 0; $i < sizeof($list); $i++) { 
    for($ii = 0; $ii < sizeof($unorderedArray); $ii++) { 
     if($list[$i] == $unorderedArray[$ii]['id']) { 
      array_push($orderedArray, $unorderedArray[$ii]); 
     } 
    } 
} 

まずはDBから結果を取り出し、それを扱うために多次元配列を作成します。次に、私が望む順序である最初の配列をループし、結果配列をループします。一致があるとき、私はそれを新しく構築された配列にプッシュします。

配列のIDが同じであるため、順序が保持されます。順序は保持されています。もう1つは他の情報よりも多くの情報を持っています。したがって、最も外側のループの順序が毎回一致します。これにより、DBの結果全体をmy $ list配列の順序で配列に入れることができます。

お手数をおかけしていただきありがとうございます。

0

使用この

SELECT * FROM table WHERE id IN (5,9,17,19,456) ORDER BY id ASC; 

だから、あなたはどのidと注文ascendingそれに一致する行を取得します。

+0

お返事ありがとうございます。私は、私の例が昇順であることを認識しました(私の悪い)。問題は、オーダーが必ずしも昇るとは限らないことです。配列は簡単に配列できます(9,5,19,456,17)。これを反映するために私の質問が更新されました。 –

+0

あなたの配列の順序は任意ですが、昇順または降順で取得する場合は、それぞれ 'ASC'または 'DESC'を使用して、' 5,9,17,19,456'または '456,19,17' 9,5'、それはあなたが望むものですか? – matiaslauriti

+0

与えられたIDの配列は順序です。変更することはできません。私が探しているのは、指定された配列と同じ順序でクエリの結果を得ることです。したがって、結果が昇順または降順ではなく、指定された配列を反映するようにしたいと思います。それは理にかなっていますか? –

関連する問題