我们目前有一些PHP代码,允许最终用户通过填写表单上的几个字段来更新我们数据库中的记录。数据库有一个名为sequentialNumber的字段,用户可以输入起始编号和结束编号,更新查询在后台运行所有记录,其中包含起始编号和结束编号之间的sequentialNumber。这是一个非常快速的查询。
我们最近遇到了一些问题,人们正在尝试更新不存在的记录。现在,这不是数据库端的问题,但如果记录不存在,他们希望得到通知,如果存在,那么哪些不存在。
我能想到的唯一方法是在循环中运行select查询:
for ($i=$startNum; $i<=$endNum; $i++) {
//run select query: select sequentialNumber from myTable where sequentialNumber = $startNum;
}
问题是,我们的共享主机对脚本有超时限制,如果sequentialNumber批处理足够大,脚本将超时。在运行更新查询之前是否有更好的方法来检查记录的存在?
编辑: 我刚想到我可以做另一种测试:获取他们试图更新的记录数($ endNum - $ startNum),然后进行计数查询:
select count(sequentialNumber) where sequentialNumber between $startNum and $endNum
如果查询结果与减法的值不同,那么我们知道所有记录都不存在。它无法告诉我们哪些不存在,但至少我们知道某些事情并不像预期的那样。这是一种有效的做事方式吗?
答案 0 :(得分:1)
你可以尝试
select sequentialNumber from myTable where sequentialNumber between $startNum and $endNum
这将返回该范围内的所有已知数字。然后,您可以使用array_search函数来查明某个数字是否已知。这应该比对db进行大量查询更快。
答案 1 :(得分:0)
var count = mysql_fetch_array(mysql_query('SELECT count(*) FROM x WHERE id>startNum and id<endNum'));
var modified = mysql_affected_rows(mysql_query('UPDATE x SET col='value' WHERE id>startNum and id<endNum'));
if (count[0] > modified) {
// panic now
}