Php 有效地检查组中是否存在任何值以及该值是哪一个?

Php 有效地检查组中是否存在任何值以及该值是哪一个?,php,mysql,Php,Mysql,我有一个100个值的列表(将来可能会扩展),我需要将其放入数据库中。然而,当其中一个已经存在时,我需要知道它是哪一个,并从表上的行中获取一些信息。这就是目标。然而,我想不出一个有效的方法来做到这一点 我想到的事情 检查值是否存在。如果没有,请提交。这是逐值完成的。优点:简单。缺点:速度慢(最少100次查询,最多200次查询) 与上面相反。如果由于重复的键约束而导致查询失败,请查询该值。相同的优点和缺点 一次插入所有值。运行重复检查程序。优点:2个(尽管很大)查询。缺点:困难,可能慢 一定有更

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

我想到的事情

  • 检查值是否存在。如果没有,请提交。这是逐值完成的。优点:简单。缺点:速度慢(最少100次查询,最多200次查询)
  • 与上面相反。如果由于重复的键约束而导致查询失败,请查询该值。相同的优点和缺点
  • 一次插入所有值。运行重复检查程序。优点:2个(尽管很大)查询。缺点:困难,可能慢

一定有更好的办法。有什么想法吗?

如果我理解正确,另一个选项是在一个查询中从数据库中选择与列表匹配的所有行,然后在应用程序代码中选中
array\u intersect()
,以查找数据库中已经存在的行,或者选中
array\u 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);

哇,我从没想过。仅在2个(大型)查询中有效,而且似乎速度相当快。我试试看。谢谢@THLQ如果您不查询主键,您可能需要一个索引来处理巨大的
IN()
子句,但它会在循环中击败一堆查询。