繁体   English   中英

按列排序mysql行?

[英]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';
        }       
)

如您所见,我有三种类型的工作: 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中获取一个只有元素的数组。

提前致谢。

您不能使用预定义的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM