有效地检查组中是否存在任何值,以及它是哪个值


Efficently check if any value exists from group and which one it is?

我有一个需要放入数据库的100个值的列表(将来可能会缩放)。然而,当其中一个已经存在时,我需要知道它是哪一个,并从表上的行中获取一些信息。这就是我们的目标。但是我想不出一个有效的方法来做到这一点。

我想到的事情

  • 检查value是否存在。如果没有,请提交。这是逐值计算的。优点:容易。缺点:慢(最少100个查询,最多200个查询)
  • 与上面相反。如果由于重复的键约束导致查询失败,请查询值。相同的优缺点
  • 一次插入所有值。运行副本检查器。优点:2个(尽管很大)查询。缺点:困难,可能很慢

一定有更好的办法。知道的吗?

如果我理解正确,另一个选项是在一个查询中选择数据库中匹配列表的所有行,然后检查应用程序代码中的array_intersect()以查找数据库中已经存在的行,或array_diff()以查找不存在的行。

// Your list into a comma-separated string
$your_list = implode(",", $your_list);
$dbexists = array();
$result = mysql_query("SELECT id FROM tbl WHERE id IN ($your_list)");
while ($row = mysql_fetch_assoc($result)) {
  $dbexists[] = $row['id'];
}
// Already existing from your set:
$exists = array_intersect($your_list, $dbexists);