編集
解決しました!それは私のせいで、mysqlクエリとphpメソッドは両方とも完全に機能しています。私の非常に悪い例は、自分自身を混乱させました。実際には、製品をお気に入り ( true / false ) で並べ替えてから、日付で並べ替える必要があります。
多次元配列を2つの「列」でソートしようとしていますが、うまくいきません:O
考えられるすべての方法を探してコピーしました(mysql - order by、php - array_multisort() )が、それでもうまくいきません....
これが私が最初に試した方法です:
// MySQL Query
SELECT * FROM `test` ORDER BY `name` ASC, `age` DESC;
// or
SELECT * FROM `test` ORDER BY `name`, `age`;
// or
SELECT * FROM `test` ORDER BY name, age;
// or
SELECT * FROM `test` ORDER BY name, age DECT;
// `name` is VARCHAR and `age` is INT
そのため、考えられるすべての構文を試しましたが、クエリで必要な結果が得られません。
元のテーブル:
ID NAME AGE
---------------------
1 adam 23
2 bernd 30
3 cris 22
4 dora 21
5 anton 18
6 brad 36
7 sam 41
8 ali 13
MySQP Query から取得したいもの:
ID NAME AGE
--------------------- // first sort by name...
8 ali 13 // then sort by age
5 anton 18 // ...
1 adam 23 // for each "similar" name or names with "a", "b", ...
2 bernd 30 // and so on...
6 brad 36
3 cris 22
4 dora 21
7 sam 41
しかし、実際には NAME ( ORDER BY name
, age
) または AGE ( ORDER BY age
, name
;
イライラしたので、そのクエリを取得してPHPでソートすることにしました...
まあ、私もいくつかのコードを試しましたが、それらはすべて機能しません。
ここに私が実際に行ったものがあります:
// this array is just exported from mysql to debug without mysql query...
$test = array(
array('id' => '1','name' => 'adam','age' => '23'),
array('id' => '2','name' => 'bernd','age' => '30'),
array('id' => '3','name' => 'cris','age' => '22'),
array('id' => '4','name' => 'dora','age' => '21'),
array('id' => '5','name' => 'anton','age' => '18'),
array('id' => '6','name' => 'brad','age' => '36'),
array('id' => '7','name' => 'sam','age' => '50'),
array('id' => '8','name' => 'ali','age' => '13')
);
// ...print out the original array
foreach( $test as $key => $value ) {
echo $value['name'] . " - " . $value['age'] . "<br>";
}
// here is the part where i am sorting...
$sort = array();
foreach ($test as $key => $value ) {
$sort['name'][$key] = $value['name'];
$sort['age'][$key] = $value['age'];
}
array_multisort($sort['age'], SORT_ASC, $sort['name'], SORT_DESC, $test);
// ...till here.
// reorder array and print the new sorted array
$sorted = array();
for( $i = 0; $i < count( $sort['name'] ); $i++ ) {
array_push( $sorted, array( $sort['name'][$i], $sort['age'][$i] ) );
echo $sort['name'][$i] . " - " . $sort['age'][$i] . "<br>";
}
しかし、これをテストするとわかるように、並べ替えは AGE にのみ影響します...
何が間違っているのかわからないので、教えてください T_T