编辑
解决了 !这是我的错,mysql 查询和 php 方法都运行良好。我非常糟糕的例子使我自己感到困惑。实际上,他们应该按收藏(真/假)然后按日期对产品进行分类。
我正在尝试按两个“cols”对多维数组进行排序,但它对我不起作用: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 查询中得到什么:
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>";
}
但是你会看到如果你测试这个,排序只会影响年龄......
我不知道我做错了什么,请告诉我伙计们T_T