所以,我有这样的arduino代码:
char
和这样的PHP代码:
'\0'
它每分钟读取数据并且罚款。但是当我将$ menit%1更改为%5时,它无法正常工作。我如何更改间隔以便每5分钟读取一次数据?感谢
答案 0 :(得分:0)
也许可行:
您希望每个时间间隔只存储一个值。我们假设间隔为5分钟。所以例如6:40:00到6:44:59之间的每个请求都会在“时间段”6:40。并且在6:45“插槽”中6:45:00到6:49:59之间的每个请求
这很容易实现。您将秒数设置为零并从分钟(模数间隔分钟)中减去,例如请求在6:43进入 - >分钟= 43 - (43%5)= 43-3 = 40
请求在6:44进入 - >分钟= 44 - (44%5)= 44-4 = 40.
请求在6:45进入 - >分钟= 45 - (45%5)= 45-0 = 45.
等等。
现在你向你的mysql表添加一个unique index,就像这样
CREATE TABLE IF NOT EXISTS `input` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`time` time NOT NULL,
`device` VARCHAR(128) NOT NULL,
`A0` int( 11 ) NOT NULL,
PRIMARY KEY ( `ID` ),
UNIQUE KEY(`date`,`time`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
UNIQUE KEY(
日期,
时间)
*将不允许第二条记录具有相同的日期+时间,因此一旦一个“时间段”的记录在表格中对同一“时隙”的任何后续INSERT都将失败(或被忽略)
在这种情况下您将获得的错误代码是1022 ER_DUP_KEY,如果您愿意,可以测试该特定错误代码。如果不这样做,您只需发送INSERT IGNORE INTO ...
查询即可。如果存在唯一的索引冲突,则会默默忽略该INSERT。
mysql_ *扩展名is deprecated将在即将发布的7版本中删除。所以我不会给你一个mysql_ *示例,而是使用PDO和prepared statements代替(尽管未经测试)。
<?php
define('INTERVAL_MINUTES', 5);
include "config/koneksi.php";
date_default_timezone_set('Asia/Jakarta');
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly', array(
PDO::ATTR_EMULATE_PREPARES=>false,
PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
));
$pdo->exec('
CREATE TABLE IF NOT EXISTS `input` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`time` time NOT NULL,
`device` VARCHAR(128) NOT NULL,
`A0` int( 11 ) NOT NULL,
PRIMARY KEY ( `ID` ),
UNIQUE KEY(`date`,`time`,`device`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
');
$ts = getdate();
// "adjusting" to the time slot
$ts['minutes'] = $ts['minutes'] - ($ts['minutes']%INTERVAL_MINUTES);
$stmt = $pdo->prepare('
INSERT IGNORE INTO
`input`
(`date`,`time`,`device`,`A0`)
VALUES
(:date,:time,:device,:A0)
');
$params = array(
'date'=>sprintf('%04d-%02d-%02d', $ts['year'], $ts['month'], $ts['mday']),
'time'=>$time = sprintf('%02d:%02d:00', $ts['hours'], $ts['minutes']),
'device'=>$_GET['device'],
'A0'=>$_GET['A0']
);
$stmt->execute($params);
编辑:*第二次认为您可能需要UNIQUE KEY(date,time,device)
- 这样多个设备可以每个每个时间段插入一条记录....
和另一个编辑:为了使它按预期工作INTERVAL_MINUTES必须是60的除数。我们可能有60分钟到一个小时,因为60有这么多的除数(1,2,3,4,5,6,10,12, 15,20,30,60),所以我希望没关系......