2010-11-29 109 views
0

我们目前有一些php代码,允许最终用户通过填写​​表单上的一些字段来更新我们数据库中的记录。数据库有一个名为sequentialNumber的字段,用户可以输入起始号码和结束号码,并且更新查询会在所有记录中在起始号码和结束号码之间使用sequentialNumber在后台运行。这是一个非常快速的查询。如何在运行更新代码之前检查现有记录?

最近我们遇到了一些问题,人们试图更新不存在的记录。现在,这不是数据库端的问题,但是如果记录不存在,他们希望得到通知,如果有的话,哪些不存在。

我能想到的要做到这一点的唯一方法是在循环中运行一个选择查询:

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

基本上是一样的东西; mySQL允许你使用Between作为操作符,所以我不需要做比一个更大的数字,也可以比另一个少。 – EmmyS 2010-11-29 19:29:29

回答

1

你可以尝试

select sequentialNumber from myTable where sequentialNumber between $startNum and $endNum 

这将在此范围内返回所有已知的数字。然后,您可以使用array_search函数来确定某个数是否已知。这应该比对db执行很多查询要快。

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 
} 
相关问题