首页 / PHP / PHP检查行是否存在的最有效方法
PHP检查行是否存在的最有效方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP检查行是否存在的最有效方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1897字,纯文字阅读大概需要3分钟。
内容图文
![PHP检查行是否存在的最有效方法](/upload/InfoBanner/zyjiaocheng/665/eba28d717ddc4e9a8183f24898fb43ae.jpg)
考虑下表
+-------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| date | date | NO | | NULL | |
| sku | varchar(10) | | | NULL |
| impressions | int(11) | NO | | NULL | |
| sales | int(11) | NO | | NULL | |
+-------------+---------+------+-----+---------+----------------+
每天从前几天的销售记录中批量下载该表.
每天下载的数据不仅包含前几天的销售数据,还包含过去90天的所有数据(可能有5万条记录).
但是,由于原本插入的内容由于我们无法控制的原因(例如,
第一天
Date: 2015-01-01
SKU: ABCD
Impressions: 100
Sales: 0
第二天
Date: 2015-01-01
SKU: ABCD
Impressions: 100
Sales: 3
Date: 2015-01-02
SKU: ABCD
Impressions: 105
Sales: 0
因此,对于数据下载中的任何给定记录,
a)已经见过并且和以前一样-忽略
b)新增-添加到数据库
c)已经看到但有新数据-更新
可以通过检查每一行来解决这个问题
while (!$file->eof()) {
$row = $file->fgets();
$data = explode("\t", $row);
$sku = $data[0];
$date = $data[1];
$impressions = $data[2];
$sales = $data[3];
$order = $em->getRepository('Orders')->findOneBy(['sku' => $sku, 'date' => $date]);
if($order && $order->getImpressions() != $impressions && $order->getSales() != $sales) {
$order->setImpressions($impressions);
$order->setSales($sales);
} else {
... create new model
}
$em->persist($order);
}
但是,将要更新数据的行将是最少的,并且对每一行进行选择将意味着由于行数巨大,此工作将非常缓慢.
所以我的问题是,可以使用什么模式来尽可能有效地解决这个问题?
任何想法欢迎
解决方法:
我建议您用新下载的数据完全替换之前90天的数据.
推理很简单:
>处理时间很短. 50,000行对于数据库而言很小.即使是一百万行,我也可能会这样做.
>仅尝试替换已更改的行很复杂,并且可能会引入错误.
内容总结
以上是互联网集市为您收集整理的PHP检查行是否存在的最有效方法全部内容,希望文章能够帮你解决PHP检查行是否存在的最有效方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。