按列排序mysql行?

时间:2014-02-13 17:37:29

标签: php mysql arrays sorting

我有以下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';
        }       
)

正如您所看到的,我有三种类型的工作:type1type2type3

有没有办法按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的元素。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您无法使用预定义的PHP函数执行此操作。但你可以很容易地自己做。

例如:假设您在一个名为$ rows的变量中的问题中写了您的MySQL结果,您可以执行以下操作来获取所需的地图。

$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包含您想要的数组。

答案 1 :(得分:1)

不幸的是,此任务在纯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'));