2013-07-06 104 views
1

我对SQL和PHP相当陌生,并且一直在解决以下问题。MySQL:每天计算数据库行数

我正在查找可能提供以下结果的SQL查询(或与PHP过滤器结合使用):基本上每天都会添加或删除一行的结果+目前为止该表中的行数。

例子:提前

2012-10-08 09:52:08 | 1 so far since beginning 
2012-12-04 15:07:56 | 2 so far since beginning 
2012-12-10 09:18:02 | 3 so far since beginning 

... 


2013-06-06 09:50:13 | 67 so far since beginning 
2013-06-13 13:46:41 | 70 so far since beginning 
2013-06-17 14:42:39 | 69 so far since beginning 
2013-06-19 14:19:26 | 74 so far since beginning 
2013-07-05 13:21:45 | 75 so far since beginning 

谢谢!

+0

那么,你想要在给定的一天中添加和删除的行的总数? – Lance

+0

我想创建一个列表,列出一般在某一天有多少行。例如,两天前有69行,昨天有74行,今天有75行。 – Yannick

回答

0

要计算在数据库条目的查询是:

$query = SELECT COUNT(*) FROM `table` 

该语句将选择在表中的每个条目,将计算行

要处理,你可以使用连接PDOmysql_*

我建议你使用PDO因为mysql_ *是depreceted并作为官方文件说:

这个扩展不赞成PHP 5.5.0的,并会在将来被移除。

的代码看起来就像这样:

<?php 
/** PDOs or MYSQL_* CONNECT HERE **/ 

echo date("Y-d-M h:m:s")." |  ".$count." so far since beginning"; 
?> 
0
$sql = "SELECT COUNT(*) FROM table_name WHERE date = ''"; 
2

您可以使用GROUP BY找到今天的记录,和子查询发现今天之前添加的行。例如,

SELECT DATE(t.datefield) AS date, COUNT(*) AS records_this_day, 
(SELECT COUNT(*) FROM mytable t2 WHERE t2.datefield < DATE(t.datefield)) AS records_before_this_day 
FROM mytable t GROUP BY DATE(t.datefield); 

你会得到的结果是这样的:

date  records_this_day records_before_this_day 
2010-02-04 27    0 
2010-02-05 2    27 
2010-02-06 1    29 
2010-02-07 1    30 

但它是有点慢。当你使用这个值时,积累records_this_day的值可能会更好。

编辑:显然,如果行被删除,那么该行的历史已经一去不复返了。所以这可能不是你想要的。

1
select count(*) cnt 
    , DATE(date_column) the_date 
    from tbl 
group 
    by date with rollup 

注意 - 如果有天没有任何条目,你不会得到一排的结果从这个sql查询设置日期。

with rollup修改将增加单行,这将是所有行的计数。您可以识别该行,因为它将具有空值the_date。或者,省略with rollup,只需自己对cnt列进行求和即可。