【问题标题】:Query to get the Employees Column values查询以获取员工列值
【发布时间】:2018-09-11 10:56:16
【问题描述】:

我正在跟踪orders表中存在的所有员工数据....

我需要获取所有员工 [ 列名 : employeename] 重新尝试 [ 列 : reattemptdate ] 并保留值 [ 列 : holddate ]

我想以以下格式显示该信息:

员工姓名1:重试:重试值:保留:保留值

员工姓名2:重试:重试值:保留:保留值

示例

chittaranjan : 重复 : 20 , 保持 : 10

Deepak 重试次数:15,保持:5

我尝试了以下查询:

$sql = "SELECT employeename, DATE(reattemptdate) as date, 
COUNT(*) as count, 0 as Held FROM orders 
WHERE DATE(reattemptdate)  = CURDATE() 
GROUP BY employeename, date

UNION

SELECT employeename, DATE(holddate) as date, 
COUNT(*) as count, 1 as Held  FROM orders 
WHERE DATE(holddate)  = CURDATE() 
GROUP BY employeename, date
"; 
$results = $db_handle->runSelectQuery($sql); 
$numrowsresult =$results[0]['count'];

foreach ($results as $result) 
{
    if ($result['Held']==0){
      $header = " Reattempet ";
    } else {
      $header = " hold ";
    }
    echo $result['employeename']."<br>";
    echo $header.": ".$result['count']."<br>";
}

我得到如下输出:

chittaranjan Reatttempet : 20

deepak 重试次数:15

chittaranjan 举行:10

深度保持:5

我需要对上述查询进行哪些更改才能获得所需的结果......

编辑 - 列结构

保持

示范

【问题讨论】:

  • 能不能显示你正在使用的表格格式
  • 如果您只有 0 或 1 个用于保存的列,您如何获得 10 或 5 ? .. 以及您正在使用哪个数据库?..(您在 select 中有一列未聚合且未在 group by 中)
  • 见:meta.stackoverflow.com/questions/271055/…。并编辑您的问题,在标签中添加您正在使用的数据库。
  • @Krishanu 请查看prnt.sc/kt0fsxprnt.sc/kt0eug,如果您需要更多详细信息,请告诉我......
  • @vickeycolors 。我读过你之前的评论。但无论如何我无法理解你的目标......而且我没有建议尝试更好地理解

标签: php mysql mysqli


【解决方案1】:

另一种方法是修改代码:

foreach ($results as $result) 
{
  if ($result['Held']==0){
    $new_array[$result['employeename']][0] = " Reattempet :" . $result['count'];
  } else {
    $new_array[$result['employeename']][1] = " hold :" . $result['count'];
  }
}
foreach ($new_aray as $name => $val)
{
  echo $name . " : " . $val[0] . " : " . $val[1];
}

【讨论】:

  • 但如果值不存在,则显示Notice: Undefined offset: 0,请帮助我.....
  • 我试过这个:if ( ! isset($val[0])) { $val[0] = 0; },似乎它的工作,它是正确的方式吗?
  • @vickeycolors 是的,我想是的。我没有其他建议。
  • 谢谢,我遇到一个问题:今天的重试值和昨天的重试值都给出相同的值,知道吗,为什么?
  • 我昨天使用这个代码:WHERE DATE(reattemptdate) = DATE(NOW() - INTERVAL 1 DAY)
【解决方案2】:

让数据库完成这项工作,它是为它量身定制的

将您的查询更改为:

SELECT CONCAT(employeename,' : Reattempt : ', count_Reattempet, ' : Hold : ', count_Hold) AS concat_header
FROM
(
    SELECT employeename, 
           SUM(CASE WHEN Held = 'Reattempet' THEN 1 ELSE 0 END) AS count_Reattempet,
           SUM(CASE WHEN Held = 'Hold'       THEN 1 ELSE 0 END) AS count_Hold
    FROM
    (
        SELECT employeename, DATE(reattemptdate) as date, 'Reattempet' as Held FROM orders WHERE DATE(reattemptdate)  = CURDATE() 
        UNION
        SELECT employeename, DATE(holddate)      as date, 'Hold'       as Held  FROM orders WHERE DATE(holddate)  = CURDATE() 
    ) A
    GROUP BY employeename
) B

它将返回一个列concat_header,格式完全符合您的要求。

chittaranjan : Reattempet : 20 : hold : 10
Deepak Reattempet : 15 : hold : 5

那么你只需要在 PHP 中执行此操作

foreach ($results as $result) 
{
      echo $result['concat_header']."<br>";
}

【讨论】:

  • 谢谢,但它显示为chittaranjan : Reattempt : 1 : Hold : 1 deepak : Reattempt : 1 : Hold : 1
猜你喜欢
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2021-04-19
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
相关资源
最近更新 更多