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