[英]sort mysql rows by column?
我有以下SQL查询:
SELECT job_id, job_type FROM jobs
我从mysql查询中得到以下结果(行集):
结果(print_r):
Array
(
[0] => stdClass Object
(
[job_id] => 239
[job_type] => 'type1';
}
[1] => stdClass Object
{
[job_id] => 53
[job_type] => 'type2';
}
[2] => stdClass Object
{
[job_id] => 76
[job_type] => 'type3';
}
[3] => stdClass Object
{
[job_id] => 78
[job_type] => 'type1';
}
)
如您所见,我有三种类型的工作: type1
, type2
, type3
有什么方法可以按job_type
映射/重新组合这些结果吗? 基本上我想拥有类似的东西:
Array
(
['type1'] => Array (
[0] => stdClass Object
{
[job_id] => 239
[job_type] => 'type1';
}
[1] => stdClass Object
{
[job_id] => 76
[job_type] => 'type1';
}
)
['type2'] => Array (
[0] => stdClass Object
{
[job_id] => 53
[job_type] => 'type2';
}
)
['type3'] => Array (
[0] => stdClass Object
{
[job_id] => 78
[job_type] => 'type3';
}
)
)
还是我应该使用其他查询? 我曾经尝试过使用array_map()
时没有运气,但是我只能从一个job_type中获取一个只有元素的数组。
提前致谢。
您不能使用预定义的PHP函数来执行此操作。 但是您可以自己轻松完成此操作。
例如:假设您的MySQL结果如问题中所写的那样称为$ rows变量,则可以执行以下操作以获得所需的映射。
$map = array();
foreach($rows as $row) {
if (!isset($map[$row->job_type])) {
$map[$row->job_type] = array($row);
} else {
$map[$row->job_type][] = $row;
}
}
现在$ map包含所需的数组。
不幸的是,此任务在纯PHP / MySQL中没有本地解决方案。 因此,您需要在PHP方面手动对其进行排序。 我认为您应该为此编写函数以便在需要时使用它
function sortBy($array, $key, $sortKeys=false){
// I don't test this function, just write it for answer, so it may contain errors
$tmp = array();
foreach($array as $k=>$v){
$tmp[$array[$k][$key]][] = $v;
}
if($sortKeys)
ksort($tmp);
return $tmp;
}
并像这样使用
print_r(sortBy(mySQLSelect(),'job_type'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.