0

編集

解決しました!それは私のせいで、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

4

2 に答える 2