繁体   English   中英

MySQL | 在特定日期使用列选择数据的最简单方法

[英]MySQL | Easiest way to select data with a column on a certain day

我有一个具有以下结构的表

+-------+-------------+------+-----+---------+----------------+
| 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`, ...");

我将很乐于尝试澄清本文中未理解的所有内容。 对我来说似乎很清楚,但这可能只是因为我是撰写它的那个人。

坦白地说,我将使用datetime列数据类型。 在执行像您这样的查询时,它们更易于特别处理。

顺便说一句,您的查询似乎正确,但是您需要输入一个表示UNIX_TIMESTAMP的整数。

问候,哈维。

使用GROUP BY,您可以计算每个名称的所有时间。 尝试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM