繁体   English   中英

uksort帮助-在单个需求帮助中使用GROUP BY

uksort help - using GROUP BY in single need help

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

您好,我有一个数组通过uksort()后看起来像这样

    Array
(
    [3] => Array
        (
            [job_id] => 4
            [job_title] => Supercar Test Driver
            [company_name] => McLaren
            [logo_small] => small_mclaren001.png
            [logo_large] => large_mclaren002.png
            [employer_id] => 3
        )

    [2] => Array
        (
            [job_id] => 3
            [job_title] => Recruitment Consultant - Driving
            [company_name] => MoovJob.com
            [logo_small] => small_rac001.png
            [logo_large] => large_rac002.png
            [employer_id] => 2
        )

    [1] => Array
        (
            [job_id] => 5
            [job_title] => Postal Worker / Post Person
            [company_name] => Royal Mail
            [logo_small] => small_royalmail001.png
            [logo_large] => large_royalmail002.png
            [employer_id] => 4
        )

    [0] => Array
        (
            [job_id] => 6
            [job_title] => Another Job
            [company_name] => MoovJob.com
            [logo_small] => small_rac001.png
            [logo_large] => large_rac002.png
            [employer_id] => 2
        )

)

但是,如果在返回此数组的SQL中我添加GROUP BY company_name,则该数组中的最后一项消失了,我想要实现的是将职位名称放在公司名称下,但只显示一次公司名称,类似于这个,

公司名称1
职务1职务2职务3

公司名称2
职务4

公司名
职位名称5职位名称6

我试图通过遵循以下观点来实现这一目标,但是我只能显示一个空缺,我在做什么错?

    <?php $oldemp   = "";?>
<?php foreach($jobs as $key => $value) : ?>
   <?php if ($oldemp != $value['company_name']) : ?>
        <?php $oldemp = $value['company_name']; ?>
        <section class="employer">
            <div class="job_holder">
                <img src="<?php echo base_url(); ?>media/uploads/users/<?php echo $value['logo_large']; ?>" width="198" height="148" alt="<?php echo $value['company_name']; ?>"/>
                <dl>
                    <dt><?php echo count($key); ?></dt>
                    <dd>Matches</dd>
                </dl>
    <?php endif;?>
            <span> + <a href="/jobwall/getjob/<?php echo $value['job_id']; ?>"><?php echo $value['job_title']; ?></a></span>
            </div>
        </section>
<?php endforeach; ?>


    function jobcmp($job1, $job2)
    {
        return strcmp($job1['company_name'], $job2['company_name']);
    }
4 个回复

尽管可以使用您的方法显示数据,但我通常会发现以更方便的格式创建第二个数组会更加简单:

$groupedJobs = array();
foreach ($jobs as $data) {
    if (!isset($groupedJobs[$data['company_name']])) {
        $groupedJobs[$data['company_name']] = array();
    }
    $groupedJobs[$data['company_name']][] = $data;
}

这将使用公司名称作为键来创建一个新的数组,并使用嵌套数组中的公司的工作作为值来创建一个新数组,为您提供如下信息:

['MoovJob.com'] => Array
    (
        [0] => Array
            (
                (job data)
            ),
        [1] => Array 
            (
                (etc.)
            )
    ),
['McLaren'] = Array
    (
        (etc)
    )

这样,遍历此数组并显示就容易得多了:

foreach ($groupedJobs as $companyName => $jobs) {
    echo $companyName;
    foreach ($jobs as $job) {
        echo $job['job_title'].'<br />';
    }
}

看起来该数组job_title DESC排序,而job_title company_name排序

您的数组未正确排序,具有相同ID的员工应该是一个接一个的,对于此数组,您应使用这样的usort方法

usort($jobs, function($a, $b) {
 if($a['employee_id'] == $b['employee_id'] return 0;
 return ($a['employee_id'] < $b['employee_id']) ? 1 : -1;
})

另一种方法,我认为更好的方法是使用array_walk为该节循环准备数据。 下面的方法将从表中删除重复项,并将同一员工的所有job_titles合并到主要员工记录中的一个键中。

array_walk($jobs, function($emp, $index) use(&jobs) {
  static $primary;

  if(isset($primary[$emp['employee_id']) {
    $jobs[$primary[$emp['employee_id']]]['job_titles'][$emp['job_id'] = $emp['job_title'];
    unset($jobs[$index]);
  } else {
    $primary[$emp['employee_id']] = $index; //remeber index of primary entry
  }
});

如果您显示SQL查询,将有所帮助。 但是,消失的行显然与您添加的GROUP BY company_name有关。

当您添加GROUP BY groupfield ,具有相同groupfield所有行groupfield “折叠”到一行中。 依赖于该字段的列(例如company_logo通常可以安全地保留在SELECT列表中。 其他所有元素都应删除或更改为使用诸如SUM()COUNT()类的聚合函数。

因此,如果要显示每个公司的职位数量,请使用COUNT(job_id)COUNT(*)

我认为您有两种选择。

  • 第一种选择是不使用GROUP BY ,或者仅使用ORDER BY并使用PHP代码显示所需内容。

  • 第二种选择是使用GROUP BY和聚合GROUP_CONCAT()函数。

您可以像这样使用它:

SELECT
    company_name
  , GROUP_CONCAT( job_id
                  ORDER BY job_id
                  SEPARATOR ', ' )
      AS job_ids
  , GROUP_CONCAT( job_title
                  ORDER BY job_id
                  SEPARATOR ', ' )
      AS job_titles
  , GROUP_CONCAT( CONCAT(job_id, '-', job_title)
                  ORDER BY job_id
                  SEPARATOR ', ' )
      AS job_ids_and_titles
  , company_name
  , logo_small
  , logo_large
  , employer_id
FROM 
  ...
GROUP BY company_name
2 Ruby在单个脚本中使用帮助器

我想在编写的ruby脚本中使用复数文本帮助程序,但是找不到如何在单个ruby脚本中包含Rails帮助程序的地方。 我知道您需要包括帮助程序模块并需要帮助程序,但是就像我说的那样,我不确定如何使它工作。 ...

2011-01-04 18:10:28 2 840   ruby
3 xor加密帮助需求

我想在Android,iPhone和BlackBerry上使用XOR加密数据。 我需要解密.net Web服务中的数据。 BlackBerry和iPhone上是否可以使用XOR加密? ...

4 config.group为true时,仅使用WirePattern帮助程序转发单个组

我正在尝试使用WirePattern帮助器在我的图形中执行一些同步。 我将config.group设置为true,因此可以确保仅在同一组件中收集和处理同组接收的数据包。 为了便于讨论,下面是第一个入站端口的示例数据包: 还有第二个港口: 因为config.group设置为 ...

2015-01-28 19:48:45 1 74   noflo
5 帮助编写查询需求的方法

我需要编写一个SQL-Server查询,但是我不知道如何解决。 我有一个带有数据的表RealtimeData: 我想获取表中存在的EOD的日期数据。 (EOD =一天结束)。 使用样本数据,我将需要重新整理一个表格,如下所示: 注意:我写评论,以便您知道EOD在哪里。 S ...

6 在AWS Lambda函数中使用单个需求的优势

这是我的伪项目: 在main/index.js我可以简单地要求所有必要的功能,如下所示: 没关系。 假设有更多功能-每个功能都在单个文件中,我只需要其中几个功能。 使用解构是否有优势/劣势? 我的意思不是: 像这样分别要求每个功能: 第一个解决方 ...

7 Excel需求帮助优化类别

我需要一个Excel函数来帮助执行以下操作。 我有一个产品列表,刚刚分配完关键字。 我需要将它们放入网站上的过滤器中,但必须将它们放在易于阅读的,用户友好的类别中。 大约40,000个项目分为100个类别,每个类别中约有30-140个关键字。 我从商品说明中得出了关键字,所以其中有些很奇 ...

8 DELPHI-ClientDataSet的帮助需求

我有一个带有以下数据的ClientDataSet 我需要将这些数据转换为 唯一重要的字段是BRANCH_ID,并且BRANCH和BRANCH_ID必须唯一 由于有很多数据,我没有两个有它的副本。 问题 :您能建议一种使用原始数据的克隆版本从数据进行转换的方法吗? ...

9 Jquery.cookies帮助需求

这里的jQuery.cookies完全是新手。 所以基本上我有一个带有子菜单的网站,如下所示: 主要站点 -分页02 -子页面03 -分页04 所有页面具有相同的内容,但是区域页面顶部的标题横幅和文本不同,而我真正需要做的是: 当访问者登陆到主页上 ...

10 使用哪种VIMEO API来满足我们的需求-基于Web的帮助“教程”

我们有一个基于Web的系统,我们正在寻求替换现有的“帮助系统”,从直接将Flash视频上传到我们的网站,改为“嵌入”我们上传到vimeo帐户的内容。 我们已经设置了一个vimeo专业版帐户,这些视频必须是“私有”的,即公众无法访问。 我应该使用哪个API版本? 而且您是否有任何示例代码说P ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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