首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跟踪员工数据

跟踪员工数据
EN

Code Review用户
提问于 2018-09-10 07:52:23
回答 2查看 80关注 0票数 0

我们有数以百计的员工和跟踪每个员工的数据,我正在使用以下代码:

代码语言:javascript
复制
runSelectQuery($sqldelivery9); 
$numrowsresultdelivery9 =$resultdeliverys9[0]['count'];         
echo $numrowsresultdelivery9;

而且,我正在跟踪每个员工的<#>last 7天记录,所以它将是100*7= 700 SQL查询。这可以接受吗?这会影响业绩吗?是否有更好的方法来处理minimal SQL查询

EN

回答 2

Code Review用户

回答已采纳

发布于 2018-09-10 08:02:07

绝对不是那么回事。您可以在一个查询中完成所有这些。

代码语言:javascript
复制
SELECT employeename, DATE(reattemptdate) as date, COUNT(*) as count
    FROM orders
    WHERE employeename in ('name1', 'name2', 'name3', '...')
        AND DATE(reattemptdate) > DATE(NOW() - INTERVAL 7 DAY)
    GROUP BY employeename, date

这将以以下形式提供数据:

代码语言:javascript
复制
name1 | 2018-09-05 | 5
name1 | 2018-09-06 | 7
name1 | 2018-09-07 | 12
name1 | 2018-09-08 | 9
name1 | 2018-09-09 | 22
name2 | 2018-09-05 | 3
name2 | 2018-09-06 | 5
name2 | 2018-09-07 | 9
name2 | 2018-09-08 | 11
name2 | 2018-09-09 | 16
...

您所需要的只是迭代数据。

当然,如果要搜索所有雇员,而不只是搜索“特定n”雇员,则可以删除employeename in ('name1', 'name2', 'name3', '...')条件。

票数 2
EN

Code Review用户

发布于 2018-09-10 08:19:36

您需要的查询如下

代码语言:javascript
复制
SELECT emploee_name, DATE(reattemptdate), count(*) cnt 
FROM orders WHERE DATE(reattemptdate) > DATE(NOW() - INTERVAL 7 DAY)
GROUP BY emploee_name, DATE(reattemptdate)

但是,它的性能可能比700个单独查询的性能差。必须谨慎地创建索引,使用emploee_name、DATE(重试日期)以及它的最后一个元素。为此,您可能需要创建一个由结果日期(重试日期)组成的单独列。

为了在PHP中方便地获得结果,您可以使用普通的PDO,这比您目前使用的任何东西都要好得多。

代码语言:javascript
复制
$sql = "SELECT emploee_name, DATE(reattemptdate), count(*) cnt 
FROM orders WHERE DATE(reattemptdate) > DATE(NOW() - INTERVAL 7 DAY)
GROUP BY emploee_name, DATE(reattemptdate)";
$data = $pdo->query($sql)->fetchAll(PDO::FETCH_GROUP);

将为您提供一个方便的数组,其中的数据将是按员工名称分组,您只需使用嵌套的foreach迭代即可。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/203453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档