如何在运行更新代码之前检查现有记录?

时间:2010-11-29 19:21:26

标签: php mysql

我们目前有一些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

如果查询结果与减法的值不同,那么我们知道所有记录都不存在。它无法告诉我们哪些不存在,但至少我们知道某些事情并不像预期的那样。这是一种有效的做事方式吗?

2 个答案:

答案 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
}