MYSQL计算行而不是显示结果

时间:2017-08-02 18:17:48

标签: php mysql

所以我有以下查询,我用它来获取一些分析统计数据。

SELECT count(*) as total,CONCAT(YEAR(created),'-',MONTH(created),'-',DAY(created))  
as date_only  FROM logs where action = 'banner view'  
and created BETWEEN '2015-07-03 21:03'
AND '2017-08-02 21:03' group by date_only order by created asc

这是有效的,它给了我这个:

enter image description here

所以我真正需要的是the total count of the rows in this case is 20,这是一个虚拟的例子,但如果数据太大而无法在图形上显示,我需要在显示统计数据之前使用此计数进行检查。

这可以实现吗?

// LE

所以过程将是这样的: 1.获取总行数,如果行数小于X(数字将在config中,它将是一个基本的if语句),然后转到ahread并运行上面的查询。

更多信息: 我实际上使用此查询来显示统计数据,我只需要调整它以显示总计数行

  

所以thquery的结果应该是

总计|在这种情况下为20

4 个答案:

答案 0 :(得分:2)

我想你会想要使用派生表。只需在FROM之后将原始查询包装在括号中,然后为派生表提供别名(在本例中为 tmp )。像这样:

SELECT count(*) FROM (
   SELECT count(*) as total,CONCAT(YEAR(created),'-',MONTH(created),'-',DAY(created))  

   as date_only  FROM logs where action = 'banner view'  
   and created BETWEEN '2015-07-03 21:03'
   AND '2017-08-02 21:03' group by date_only order by created asc
) as tmp;

如果我理解你想要正确做什么,这应该有效。它应该返回原始查询的实际结果数。

发生的事情是括号查询的结果被用作一种要查询的虚拟表。带括号的查询返回20行,因此"虚拟"表有20行。外部count(*)只计算该虚拟表中有多少行。

答案 1 :(得分:1)

基于PHP标记,我假设您使用PHP将查询发送到MySQL。如果是这样,您可以使用mysqli_num_rows来获得答案。

如果您的查询结果是$ result,那么:

$total = mysqli_num_rows($result);

面向对象样式的语法略有不同,而不是程序样式。

最好的部分是您不需要额外的查询。您执行原始查询并获取额外的mysqli_num_rows而不运行另一个查询。所以你可以找出分页或字体大小或其他什么然后再显示而不再进行查询。

答案 2 :(得分:0)

这是一个小查询,但工作正常,并给我总行数,你只需要添加你的条件。

SELECT COUNT(*) FROM table WHERE field LIKE '%condition%'

小组我认为您需要删除,因为这不是计算记录,而是划分所有group by,例如:记录= 4 ,有你的团体 1 1 1 1

我希望这可以帮到你

答案 3 :(得分:0)

你可以这样试试。

    SELECT COUNT(*) FROM ( SELECT count(*) as total,CONCAT(YEAR(created),'-',MONTH(created),'-',DAY(created))  
    as date_only  FROM logs where action = 'banner view'  
    and created BETWEEN '2015-07-03 21:03'
    AND '2017-08-02 21:03' group by date_only HAVING total >=20 ) temp