gpt4 book ai didi

php - 如何查询员工详细信息并关联他们的绩效指标?

转载 作者:行者123 更新时间:2023-12-05 07:08:01 25 4
gpt4 key购买 nike

我正在获取所有已批准但未存档的员工的 ID、名字和姓氏。然后我循环这些结果并使用 id 查询其他表以收集一些计数数据。

我尝试了下面的代码,但没有得到预期的输出。

$queryEmp = "
SELECT id, firstname, lastname
FROM tbl_employee as e
WHERE is_archive=0 and is_approved=1
";
$getQuery= $this->db->query($queryEmp);
$result= $getQuery->result();
foreach ($result as $key=> $value) {
//echo "<pre>";
print_r($value);

$day = "MONTH(date_of_created) = DATE(CURRENT_DATE())";
$group = "f_id IN (SELECT MAX(f_id) FROM tbl_fileStatus GROUP BY f_bankid)";
$condiion = "and ba.createdby='" . $value->id . "' and " . $day ." and " . $group;
$query2 = "
select
(SELECT COUNT(c_id)
FROM tbl_lead
WHERE leadstatus='1' AND ".$day.") as confirmCount,

(SELECT COUNT(f_id)
FROM tbl_fileStatus as fs
join tbl_bankdata as ba on ba.bank_id=fs.f_bankid
WHERE fs.f_filestatus=1 " . $condiion . ") as disbursed,

(SELECT COUNT(f_id)
FROM tbl_fileStatus as fs
join tbl_bankdata as ba on ba.bank_id=fs.f_bankid
WHERE fs.f_filestatus=2 ".$condiion.") as filesubmit
";
# code...
$getQuery2= $this->db->query($query2);
$result2[]=$getQuery2->result();
}
echo "<pre>";
print_r(result2);

$result 看起来像这样:

Array (
[0] => stdClass Object (
[id] => 1
[firstname] => xyz
[lastname] => xyz
)
...
)

第二个查询输出:

Array (
[0] => Array (
[0] => stdClass Object (
[fallowCall] => 0
[confirmCount] => 0
[disbursed] => 0
[filesubmit] => 0
)
)
...
)

如何生成将各个员工与其绩效指标相关联的正确结果?无论是这种结构:

Array (
[0] => stdClass Object (
[id] => 1
[firstname] => xyz
[lastname] => xyz
[somename] => (
[fallowCall] => 0
[confirmCount] => 0
[disbursed] => 0
[filesubmit] => 0
)
)
...
)

或者这个结构:

Array (
[0] => stdClass Object (
[id] => 1
[firstname] => xyz
[lastname] => xyz
[fallowCall] => 0
[confirmCount] => 0
[disbursed] => 0
[filesubmit] => 0
)
...
)

我在这里添加了我的表结构和一些示例数据:https://www.db-fiddle.com/f/8MoWmKPuzTrrC3DQJsiX35/0

这里有一些注释

1) createdby是表tbl_employee的id>

2)bank表中的lead_id为表tbl_leadc_id

3) tbl_fileStatus中的f_bankid为表tbl_bankdatabank_id

最佳答案

实际上不需要创建额外的深度/复杂性来保存计数数据。此外,通过使用 LEFT JOIN 的组合来连接相关表并应用所需的条件规则,您只需访问数据库一次即可获得所需的结果。毫无疑问,这将为您的应用程序提供卓越的效率。 LEFT JOIN 使用起来很重要,这样计数可以为零,而不会将员工排除在结果集中。

此外,我应该指出,您尝试的查询错误地将 MONTH() 值与 DATE() 值进行了比较——这永远不会有好的结果. :) 事实上,为了确保您的 sql 准确地将当前月份与当前年份分开,您还需要检查 YEAR 值。

我推荐的sql:

SELECT
employees.id,
employees.firstname,
employees.lastname,
COUNT(DISTINCT leads.c_id) AS leadsThisMonth,
SUM(IF(fileStatus.f_filestatus = 1, 1, 0)) AS disbursedThisMonth,
SUM(IF(fileStatus.f_filestatus = 2, 1, 0)) AS filesubmitThisMonth
FROM tbl_employee AS employees

LEFT JOIN tbl_lead AS leads
ON employees.id = leads.createdby
AND leadstatus = 1
AND MONTH(leads.date_of_created) = MONTH(CURRENT_DATE())
AND YEAR(leads.date_of_created) = YEAR(CURRENT_DATE())

LEFT JOIN tbl_bankdata AS bankData
ON employees.id = bankData.createdby

LEFT JOIN tbl_fileStatus AS fileStatus
ON bankData.bank_id = fileStatus.f_bankid
AND MONTH(fileStatus.date_of_created) = MONTH(CURRENT_DATE())
AND YEAR(fileStatus.date_of_created) = YEAR(CURRENT_DATE())
AND fileStatus.f_id = (
SELECT MAX(subFileStatus.f_id)
FROM tbl_fileStatus AS subFileStatus
WHERE subFileStatus.f_bankid = bankData.bank_id
GROUP BY subFileStatus.f_bankid
)

WHERE employees.is_archive = 0
AND employees.is_approved = 1

GROUP BY employees.id, employees.firstname, employees.lastname

SUM(IF()) 表达式是一种用于执行“条件计数”的技术。 “聚合数据”是通过使用 GROUP BY 形成的,并且有专门的“aggregate functions”必须用于从这些集群/非平面数据集合创建线性/平面数据。 fileStatus 数据由于 GROUP BY 调用而有效地堆积在自身上。如果调用了 COUNT(fileStatus.f_filestatus),它将计算集群中的所有行。由于您希望区分 f_filestatus = 1f_filestatus = 2,因此使用了 IF() 语句。这与 COUNT() 做同样的事情(每次符合条件的出现加 1),但它与 COUNT() 的不同之处在于它不计算特定行(在集群范围内)除非 IF() 表达式被满足。 Another example .

这是一个 db fiddle 演示,对您提供的示例数据进行了一些调整:https://www.db-fiddle.com/f/8MoWmKPuzTrrC3DQJsiX35/4 (结果集只会是“好”,而当前是今年 6 月。)

将上述字符串保存为$sql后,您可以简单地执行它并像这样遍历对象数组:

foreach ($this->db->query($sql)->result() as $object) {
// these are the properties available in each object
// $object->id
// $object->firstname
// $object->lastname
// $object->leadsThisMonth
// $object->disbursedThisMonth
// $object->filesubmitThisMonth
}

关于php - 如何查询员工详细信息并关联他们的绩效指标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61977036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com