创建按周和用户分组的多维数组,同时显示零值

克雷格豪威尔

这是我到目前为止所拥有的:

$year = date("Y");
$start = "01/01/".$year;
$today = date("Y-m-d");
$first = $year."-05-14";

$volumeYTDsm = [];

$assignments = "
SELECT COUNT(j.leadid) AS leadcount, DATE_ADD(j.leadcreated, INTERVAL(1-DAYOFWEEK(j.leadcreated)) DAY) AS weeks,
  DATE_ADD(j.leadcreated, INTERVAL(7-DAYOFWEEK(j.leadcreated)) DAY), u.username
  FROM jobbooktbl j
  INNER JOIN assignmentstbl a
    ON j.leadid=a.custid
  INNER JOIN usertbl u
    ON a.userid=u.userid
  WHERE j.leadcreated >= '".$first."' AND j.leadcreated <= '".$today."' AND YEAR(j.leadcreated) = '".$year."'
  GROUP BY WEEK(j.leadcreated), a.userid";
$assignmentsqry = mysqli_query($db,$assignments);
while ($row = mysqli_fetch_array($assignmentsqry)) {
  $sm = $row['username'];
  $float = floatval($row['leadcount']);
  $date = $row["weeks"];
  $newdate = date("n/j/Y", strtotime($date));
  array_push($volumeYTDsm, [$sm,$float]); 
}

这将输出以下多维数组:

[["Ryan Balcom",10],["Ryan Balcom",1],["Jared Beckwith",13],["Jared Beckwith",7],["Jared Beckwith",5],["Jared Beckwith",2],["Jim Roberts",9],["Jim Roberts",4],["Jim Roberts",2],["Jim Roberts",4],["Jim Kelly",14],["Jim Kelly",16],["Jim Kelly",10],["Jim Kelly",6],["Josh Bell",9],["Josh Bell",8],["Josh Bell",5],["Josh Bell",10],["Mike Horton",16],["Mike Horton",5],["Mike Horton",5],["Mike Horton",2],["Paul Schilthuis",7],["Paul Schilthuis",6],["Paul Schilthuis",4]]

这个结果有两个我无法纠正的问题。

1.如果计数为0,我需要计数返回0。我尝试了以下方法无济于事:

COALESCE(COUNT(j.leadid),0) AS leadcount
IFNULL(COUNT(j.leadid),0) AS leadcount

2.我需要内部数组由用户实际分组,如下所示:

[["Ryan Balcom",0,0,10,1],["Jared Beckwith",13,7,5,2],["Jim Roberts",9,4,2,4],["Jim Kelly",14,16,10,6],["Josh Bell",9,8,5,10],["Mike Horton",16,5,5,2],["Paul Schilthuis",0,7,6,4]]

我仍在学习这些更复杂的查询。

更新

感谢 Waldson Patricio,解决了一半的难题。现在数组正在正确格式化,但它没有像我希望的那样描绘 0。

这是更新后的代码:

$assignments = "
  SELECT COUNT(j.leadid) AS leadcount, DATE_ADD(j.leadcreated, INTERVAL(1-DAYOFWEEK(j.leadcreated)) DAY) AS weeks,
    DATE_ADD(j.leadcreated, INTERVAL(7-DAYOFWEEK(j.leadcreated)) DAY), u.username
  FROM jobbooktbl j
  LEFT JOIN assignmentstbl a
    ON j.leadid=a.custid
  LEFT JOIN usertbl u
    ON a.userid=u.userid
  WHERE j.leadcreated >= '".$first."' AND j.leadcreated <= '".$today."' AND YEAR(j.leadcreated) = '".$year."' AND u.salesman = 1
  GROUP BY WEEK(j.leadcreated), a.userid";
$assignmentsqry = mysqli_query($db,$assignments);
while ($row = mysqli_fetch_array($assignmentsqry)) {
  $key = $row['username']; //unnecessary variable for demonstration purposes
  if (!isset($volumeYTDsm[$key])) {
    $volumeYTDsm[$key] = [$row['username']];
  }
  $float = floatval($row['leadcount']);
    $volumeYTDsm[$key][] = $float;
  }
  $volumeYTDsm = array_values($volumeYTDsm);//removing keys
}

这输出:

[["Ryan Balcom",10,1],["Jared Beckwith",13,7,5,2],["Jim Roberts",9,4,2,4],["Jim Kelly",14,16,10,6],["Josh Bell",9,8,5,10],["Mike Horton",16,5,5,2],["Paul Schilthuis",7,6,4]]

我曾尝试将连接更改为以下,但这也不起作用:

FROM usertbl u
LEFT JOIN assignmentstbl a
  ON u.userid=a.userid
LEFT JOIN jobbooktbl j
  ON a.custid=j.leadid

我也试过合并和 ifnull 什么都没有:

COALESCE(COUNT(j.leadid),0) AS leadcount
IFNULL(COUNT(j.leadid),0) AS leadcount
沃尔德森·帕特里西奥

回答您的问题:

  1. 如果计数为 0,我需要计数返回 0

您正在选择jobbooktbl j和内部连接assignmentstbl a ON j.leadid=a.custidON子句确保leadid必须等于a.custid你的计数永远不会是 0。如果你想要j那些与a没有关系的,使用LEFT JOIN而不是INNER JOIN(为了这个工作,你也应该对另一个做同样的INNER JOIN事情):

$assignments = "
SELECT COUNT(j.leadid) AS leadcount, DATE_ADD(j.leadcreated, INTERVAL(1-DAYOFWEEK(j.leadcreated)) DAY) AS weeks,
  DATE_ADD(j.leadcreated, INTERVAL(7-DAYOFWEEK(j.leadcreated)) DAY), u.username
  FROM jobbooktbl j
  LEFT JOIN assignmentstbl a
    ON j.leadid=a.custid
  LEFT JOIN usertbl u
    ON a.userid=u.userid
  WHERE j.leadcreated >= '".$first."' AND j.leadcreated <= '".$today."' AND YEAR(j.leadcreated) = '".$year."'
  GROUP BY WEEK(j.leadcreated), a.userid";
  1. 我需要内部数组由用户实际分组,如下所示:

在这里,我假设它u.username是唯一的(如果不是,您可以在字段列表中添加 u.userid 并将其用作键而不是用户名):

$assignmentsqry = mysqli_query($db,$assignments);
while ($row = mysqli_fetch_array($assignmentsqry)) {
    $key = $row['username']; //unnecessary variable for demonstration purposes

    if (!isset($volumeYTDsm[$key])) {
        $volumeYTDsm[$key] = [$row['username']];
    }

    $float = floatval($row['leadcount']);
    $volumeYTDsm[$key][] = $float;
    //$date = $row["weeks"]; // You're not using it
    //$newdate = date("n/j/Y", strtotime($date)); // You're not using it
}
$volumeYTDsm = array_values($volumeYTDsm);//removing keys

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用多维数组按类别分组和显示MySQL结果

来自分类Dev

Laravel Eloquent,按周分组并显示周开始和结束

来自分类Dev

按数字值对多维数组排序(最后为零)

来自分类Dev

多维数组按值排序,同时将其转换为整数

来自分类Dev

按值对分组的多维数组进行排序

来自分类Dev

LINQ和按周分组

来自分类Dev

PHP-如何按和值对多维数组排序?

来自分类Dev

按包含数字和单词的值对多维数组进行排序

来自分类Dev

按值从多维搜索数组

来自分类Dev

如何按多维数组列表进行分组

来自分类Dev

Python:创建多维零数组的多维数组

来自分类Dev

Python按列分组数组并显示唯一值

来自分类Dev

按周数和周结束分组

来自分类Dev

按周 dplyr 的条件和分组摘要

来自分类Dev

从多维PHP数组系统地排序和显示值

来自分类Dev

突出显示和隐藏多维数组中的重复值

来自分类Dev

按日期分组,包括零值,但按联接表分组

来自分类Dev

按索引处的相同值对多维数组中的项进行分组

来自分类Dev

PHP数组按相同值和SUM分组

来自分类Dev

按数组和求和变量分组以查看最高值

来自分类Dev

按产品和时间分组,并包含零

来自分类Dev

PHP多维数组循环并按值分组

来自分类Dev

具有“按多维数据集分组”和NULL值的SQL查询

来自分类Dev

按值分组json数组

来自分类Dev

按数组值分组记录

来自分类Dev

计算列中的不同值,同时按不同的列值进行总计和分组

来自分类Dev

根据其他列的值创建新的数据框,同时按ID分组

来自分类Dev

创建按日期和用户分组的供稿(以下),按最近在Rails上的ruby排序

来自分类Dev

按值和条件分组

Related 相关文章

热门标签

归档