php - 按 "x Days Old"列出结果

标签 php mysql

我有一个包含应用程序的表格,当联系他们时,“已联系”列标记为“1”。如果可能的话,我想做的是计算有多少结果是 3 天前的,有多少是 4-6 天前的,有多少是 7 天或以上的。这可以在单个查询中实现吗?

 __________________________________
| Name | Contacted |    Date       |
 ----------------------------------
| Bob  |      1    |  2016-09-16   |
| Ben  |      1    |  2016-10-03   |
| Sam  |      1    |  2016-10-03   |

编辑:

使用以下内容:

SELECT 
case  
    when datediff( CURDATE(), `submission_date`)  = 3 then '3 Days'
    when datediff( CURDATE(), `submission_date`)  between 4 and 6 then '4-6 Days'
    when datediff( CURDATE(), `submission_date`)  > 6 then  '7 or more days'
end as `days`,
sum( case  
    when datediff( CURDATE(), `submission_date`)  = 3 then 1 
    when datediff( CURDATE(), `submission_date`)  between 4 and 6 then 1
    when datediff( CURDATE(), `submission_date`)  > 6 then 1
else 0 
end  ) as tot 
FROM my_table 
GROUP BY
case  
    when datediff( CURDATE(), `submission_date`)  = 3 then '3 Days'
    when datediff( CURDATE(), `submission_date`)  between 4 and 6 then '4-6 Days'
    when datediff( CURDATE(),`submission_date`) > 6 then  '7 or more days'
end ;

然后

echo '<p>'.$row['tot'].'</p>';

我得到:

0
1

最佳答案

您可以使用选择案例和分组依据

 select 
     case  
        when datediff( CURDATE(), `date`)  <= 3 then '3 Days'
        when datediff( CURDATE(), `date`)  between 4 and 6 then '4-6 Days'
        when datediff( CURDATE(), `date`)  > 6 then  '7 or more days'
      end  as `days`,
    sum( case  
        when datediff( CURDATE(), `date`)  <= 3 then 1 
        when datediff( CURDATE(), `date`)  between 4 and 6 then 1
        when datediff( CURDATE(), `date`)  > 6 then 1
        else 0 
    end  ) as tot 
 from my_table 
 where contacted = 1
 group by 
      case  
        when datediff( CURDATE(), `date`)  <= 3 then '3 Days'
        when datediff( CURDATE(), `date`)  between 4 and 6 then '4-6 Days'
        when datediff( CURDATE(),`date`) > 6 then  '7 or more days'
      end ;

my_result 列中,您应该找到所需的字符串

   select  concat( 'You have *** ',  sum( case  
        when datediff( CURDATE(), `date`)  <= 3 then 1 
        when datediff( CURDATE(), `date`)  between 4 and 6 then 1
        when datediff( CURDATE(), `date`)  > 6 then 1
        else 0 
    end  ), ' *** New Items more than ' , 
     case  
        when datediff( CURDATE(), `date`)  <= 3 then '3 Days old'
        when datediff( CURDATE(), `date`)  between 4 and 6 then '4-6 Days'
        when datediff( CURDATE(), `date`)  > 6 then  '7 or more days'
      end ) as my_result 
 from my_table 
 where contacted = 1
 group by 
      case  
        when datediff( CURDATE(), `date`)  <= 3 then '3 Days'
        when datediff( CURDATE(), `date`)  between 4 and 6 then '4-6 Days'
        when datediff( CURDATE(),`date`) > 6 then  '7 or more days'
      end ;

关于php - 按 "x Days Old"列出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39837207/

相关文章:

javascript - 刷新静态页面中的聊天记录

python - 配置不正确 : Error loading MySQLdb module: No module named MySQLdb

mysql - 在mysql中获取一周的最后一个值

mysql - 如何在 CURRENT_TIMESTAMP MySQL 中添加 24 小时?

php - Switch 和 IF 有什么区别?

php - PHP/MYSQL float 的异常值

php - 我的 PHP 中有一个 undefined variable

php - 如何确定 PHP 脚本处于终止阶段?

mysql - 流氓外键

用于特定查询的 MySQL 索引