php - MySQL 组增量

标签 php mysql

我正在调整我的一个应用程序中的脚本,但遇到了障碍。我有一个例程,基本上列出了所有候选人的面试并打印他们正在处理的职位空缺的面试轮次。这是数据库中的一个示例表。

+---------+-------------------+------------+
|contactid|interviewtime      |assignmentid| 
+---------+-------------------+------------+
|1        |2016-01-01 10:00:00| 1          |
+---------+-------------------+------------+
|1        |2016-01-02 10:00:00| 1          |
+---------+-------------------+------------+
|1        |2016-01-03 10:00:00| 1          |
+---------+-------------------+------------+
|1        |2016-01-04 10:00:00| 2          |
+---------+-------------------+------------+
|1        |2016-01-05 10:00:00| 2          |
+---------+-------------------+------------+
|1        |2016-01-03 10:00:00| 2          |
+---------+-------------------+------------+

我想制作如下内容:

+---------+-------------------+------------+-----+----+
|contactid|interviewtime      |assignmentid|round|last|
+---------+-------------------+------------+-----+----+
|1        |2016-01-01 10:00:00| 1          |1    |no  |
+---------+-------------------+------------+-----+----+
|1        |2016-01-02 10:00:00| 1          |2    |no  |
+---------+-------------------+------------+-----+----+
|1        |2016-01-03 10:00:00| 1          |3    |yes |
+---------+-------------------+------------+-----+----+
|1        |2016-01-04 10:00:00| 2          |2    |no  |
+---------+-------------------+------------+-----+----+
|1        |2016-01-05 10:00:00| 2          |3    |yes |
+---------+-------------------+------------+-----+----+
|1        |2016-01-03 10:00:00| 2          |1    |no  |
+---------+-------------------+------------+-----+----+

我已经设法让输出在 PHP 中工作,但我必须执行 2 个额外的查询才能获取输出,这使我的执行时间增加了 1.5~ 秒。我想知道是否可以让 MySQL 来完成繁重的工作,并希望能缩短这个时间。我确信随着表的增长,我当前的实现将成为瓶颈。

编辑[2016-10-31]

我正在使用此查询添加计算行数的窗口函数,但我对拼图的最后一 block 有问题,也就是说这是否是最后(最大)一轮。

SELECT a.round_number AS round, a.contactid, a.assignmentid
FROM (
   SELECT @round_number:=CASE WHEN @contactid=contactid THEN @round_number+1 ELSE 1 END AS round_number,@contactid:=contactid AS contactid, assignmentid
   FROM tbl_interviews, (SELECT @round_number:=0,@contactid:='') AS t
ORDER BY contactid DESC) AS a
WHERE a.contactid!= '0'
ORDER BY a.round_number DESC

此后,我向父 SELECT 添加了另一列:

(CASE WHEN MAX(a.round_number) < a.round_number THEN 'no' ELSE 'yes' END) AS last

但是,最后一个条件仅返回一行而不是整个数据集,并且让我困惑。我需要找到该组中的最大回合并对其运行 CASE 函数。

最佳答案

我不太确定您现在使用哪两个查询来运行。 但是像这样使最后一列成为有条件的怎么样呢?

SELECT contacted, interviewtime, assignmetnid, round,
CASE WHEN round < 3 THEN last = 'no'
ELSE 'yes' END AS last
FROM Table

关于php - MySQL 组增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640220/

相关文章:

php - 如何从两个数组创建对?

php - 无法使用 AJAX 调用从 mysql 获取数据

php - Html 表单传递不带点的输入复选框变量

php - 即使在主类别上,页面也会返回子类别的 ID

mysql - 检索 2 个连接表的相似列

php - 为什么一个 php 标签内的两个查询不起作用

php - 如何在 Lumen 中启用助手

php - MySQL PHP : Extra Rows

PHP 未检测文件输入值

Mysql选择除另一个表中的行之外的所有行