2015-01-11 95 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;