2013-07-06 108 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列進行求和即可。