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

标签 php mysql

我有一个包含 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);

关于php - 有效地检查组中是否存在任何值以及它是哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480042/

相关文章:

php - 如何在 Magento Go 中查找和编辑 PHTML 文件?

php - Wordpress 是否有 $_POST、$_GET 和 $_REQUEST 的包装类?

php - Codeigniter 中的路由 - 自动

php - 在 PHP 中使用 'bind value' 时仅插入唯一条目的适当 SQL 语法

sql - 最好的mysql方法?

php - Validator EmailAddress 可以验证电子邮件数组

mysql - Spring Boot+Hibernate向mysql插入空值

MySQL:错误消息无法创建表(errno:150)

mysql : grant all priviledges to one user on all tables/columns in one command

mysql - 优化查询,重复具有最早日期的行