2015-01-11 97 views
0
某一天

與列數據最簡單的方法我有以下結構MySQL |選擇在

+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(32) | NO |  | NULL |    | 
| time | int(19)  | NO |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 

time被設置爲UNIX_TIMESTAMP表。

如果我想與某個名字來算值的量,用了一天中的時間值,這將是明智的,改變我的表&應用程序使用DATETIME型,或者是有一個簡單的方法,我可以選擇當天有不同的值,並且這樣做的天數爲&名稱。

我使用PHPPDO擴展名來查詢數據庫,並且我正在使用下面的代碼來創建查詢。

$stmt = $dbh->prepare("SELECT 
    (SELECT COUNT(*) FROM `test` WHERE `name`='name' AND `time` > :time1First AND `time` < :time1Second) AS `time1`, ..."); 

我會很樂意嘗試澄清任何在本文中無法理解的內容。我似乎很清楚,但這可能只是因爲我是寫它的人。

+0

那麼這裏有什麼問題? –

+0

只是想知道是否有更好的方式來存儲數據/查詢它,或者我目前的方式沒問題。 – Matthew

+0

@Mthethew MySQL有一個特殊的TIMESTAMP類型。你爲什麼使用int? – user4035

回答

0

在我坦白的說,我會使用日期時間列數據類型。在做類似你的查詢時,他們更容易處理。

順便說一句,你的查詢似乎是正確的,但你需要輸入一個int代表UNIX_TIMESTAMP。

Regards, Xavi。

+0

謝謝你的答案,Xavier。 我將如何去使用PHP的datetime?我可以使用'date()'格式化嗎? – Matthew

+0

不客氣馬修。是的,你可以使用日期(「Y-m-d H:i:s」)。問候。 –

0

使用GROUP BY,您可以統計每個名稱的所有時間。試試這個

SELECT name, COUNT(*) as time1 
    FROM test 
WHERE name = 'name' 
    AND time BETWEEN :time1First AND :time1Second 
GROUP BY name 
ORDER BY name;