php检查数据库记录,php-检查数据库中是否有新条目

我正在尝试构建一个将查询数据库的应用程序,并在数据进入数据库时​​将数据发送到某个地方.

我可以使用以下代码从数据库中获取所需的数据:

$sql="SELECT * FROM `signals` order by `time` DESC LIMIT 100";

$result = mysqli_query($DatabasePointer,$sql)

or die(mysqli_error($DatabasePointer));

$row_cnt = mysqli_num_rows($result);

if($row_cnt>0)

{

$array = array();

$i=0;

while($row = mysqli_fetch_array($result))

{

$i++;

//$a = array();

$epoch = $row['time'];

// convert UNIX timestamp to PHP DateTime

$dt = new DateTime("@$epoch");

if(

($row['symbol'] === 'USDJPYecn')

|| ($row['symbol'] === 'USDCADecn')

|| ($row['symbol'] === 'EURUSDecn')

)

{

if(

($row['timeframe'] === 'M5')

|| ($row['timeframe'] === 'M15')

)

{

$a = array(

"time" => $dt->format('Y-m-d H:i:s'),

"signal" => $row['signal'],

"symbol" => $row['symbol'],

"price" => $row['price'],

"timeframe" => $row['timeframe'],

"epoch" => $row['time'],

"candel" => $row['candel']

);

$array[] = $a;

}

}

} // while

echo json_encode($array, JSON_UNESCAPED_SLASHES);

}

但是,我不确定如何修改代码以检查数据是否为新数据,或者是否已发送到其他来源.我也不确定如何修改代码以仅在命中数据库时发送新数据,而不是像我现在正在调用的那样整个数据数组.

有人能指出我正确的方向吗?

编辑:

$sql="SELECT * FROM `tdisignals` order by `time` DESC LIMIT 100";

$result = mysqli_query($DatabasePointer,$sql)

or die(mysqli_error($DatabasePointer));

$row_cnt = mysqli_num_rows($result);

if($row_cnt>0)

{

$array = array();

$i=0;

while($row = mysqli_fetch_array($result))

{

$i++;

//$a = array();

$epoch = $row['time'];

// convert UNIX timestamp to PHP DateTime

$dt = new DateTime("@$epoch");

if(

$row['symbol'] === 'USDJPYecn'

|| ($row['symbol'] === 'USDCADecn')

|| ($row['symbol'] === 'GBPUSDecn'))

{

if(

$row['timeframe'] === 'M5')

|| ($row['timeframe'] === 'M15'))

{

$a = array(

"time" => $dt->format('Y-m-d H:i:s'),

"signal" => $row['signal'],

"symbol" => $row['symbol'],

"price" => $row['price'],

"timeframe" => $row['timeframe'],

"epoch" => $row['time'],

"candel" => $row['candel'],

);

$array[] = $a;

}

}

}

// echo json_encode($array, JSON_UNESCAPED_SLASHES);

$fuegostore = json_encode($array, JSON_UNESCAPED_SLASHES);

// $sql2 = "INSERT INTO fuegosync (time, lastsync) ".

// "VALUES ('$date', '$fuegostore')";

// $result2 = mysqli_query($DatabasePointer,$sql2)

// or die(mysqli_error($DatabasePointer));

$sql3="SELECT lastsync, MAX(CAST(time AS CHAR)) FROM `fuegosync`";

$result3 = mysqli_query($DatabasePointer,$sql3)

or die(mysqli_error($DatabasePointer));

$row2 = mysqli_fetch_row($result3);

if($row2[0] === $fuegostore)

echo 'No New Signals';

else

echo 'New Signals';

///OPTION 1:

//print_r (json_encode($array[0], JSON_UNESCAPED_SLASHES));

//OPTION 2:

foreach($array as $x) {

if(strtotime($array[0]['time']) >= $row2[1]) {

echo ''.$x['signal'].' - '.$x['symbol'].' - '.$x['price'].'
';

} else {

echo 'No New Signals';

}

}

echo $row2[0];

}

此代码成功检测到命中数据库的新数据.我现在正在努力的是修改代码,使其仅显示新检测到的数据,而不显示您看到的整个数组.

新编辑:

我已经获得了仅显示最新数据的代码,但是现在我遇到了一个难题.

如果我每分钟轮询一次数据库,并且有一个新的数据命中数据库,则脚本将对其进行拾取;但是,如果在第一个新数据被发送到目标后数秒内又有另一个新数据命中数据库,则第二个数据将命中数据库.新作品将被完全忽略,因为投票将是每分钟一次.我基本上必须每隔几秒钟轮询一次数据库……这听起来像一场噩梦……

灰色的选项1是显示最新数据的内容,但是会在基于分钟的轮询之前跳过较新的数据,除非每秒对数据库进行一次轮询.

选项2可以工作,但是可以显示整个数组…所以我不确定如何修改代码以仅显示最新片段,而不显示整个组件.

有什么建议么?

解决方法:

担保的

做这种事情的最安全的方法之一是:

>在源上增加字段

>允许查询目标

分步,源驱动

>您在源中添加了一些数据,其ID会自动增加

>您从源查询目标,并要求知道最后一个ID

>使用此ID从源中获取所有新记录,并使用这些数据查询目标上的插入页面

备用,目标驱动

>您在源中添加了一些数据,其ID会自动增加

>您的目标获得更大的ID,并要求来源提供新数据

>目标自己更新

您可以再次执行第一步.如果您小心插入(使用回滚,一次失败就将整个批次中断),那么只要源/目标链接发生故障,并且带宽尽可能低,就应该有一个完美的目标.

单面和免签

这允许从源发送批量数据,而无需答案或目标操作.

不管数据是否在途中丢失,它只会发送一次.

>具有三个状态字段在源上发送

一步步

>在源中添加一些数据,默认情况下将其发送为0

>您将每个发送== 0设置为发送= -1

>选择每-1,然后将它们发送到目标

>将-1更新为1

返回第一步.

这样可以使您大批量工作,而不必在发送脚本之前加锁写操作,并且确保在发送脚本之间不能掉线.

时间戳记

这看起来很像上一个,但是我们没有使用每行一个字段,而是使用一个新表来保持最后一个同步:

一步步

>您在源中添加一些数据及其时间戳

>您将获得当前时间戳-1(现在是一秒钟)

>您将获得最后的同步时间戳(如果是第一次同步,则为0)

>选择并发送行,其中timestampOfPost< = timestamp-1和timestampOfPost> timestampLastSync

>使用时间戳-点2中的1更新您的上一个同步时间戳.

如果您不使用“将时间倒退1秒”并将其保留在变量中,则时间戳可能会很棘手,因为您可能会丢失一些更新:

如果以*** 754(.1)s发送,则从*** 754(.2)s到(.9)s的每一行都将被视为已发送,就像我们完成了*** 754的时间戳一样,它将开始下次发送*** 755.

标签:arrays,sql,mysql,php

来源: https://codeday.me/bug/20191112/2024189.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值