PHP/MySql : find missing records by comparing to lists

标签 php mysql

我有 50,000 条用户记录,其中包含一个字段 booklist,其中包含以逗号分隔的 bookID 列表。 我有一个以 bookID 作为主键的 book 表,其中包含大约 100,000 条记录。

我想循环遍历所有用户及其 booklist 以查找 book 表中是否存在匹配的 bookID。如果它不在 book 表中,我需要将该 bookID 插入到 book 表中。

这可以单独使用 SQL 来完成吗?

如果我使用 PHP,我最好将所有 bookID 列表组合成一个长字符串或数组,然后循环遍历 中的所有 bookID表中找到丢失的内容?

这是一次性脚本,因此越简单越好;-)

最佳答案

嗯,您不应该有逗号分隔的多值字段,否则会妨碍完整的 SQL 解决方案。恐怕你现在陷得太深了,对吧?

让我们看看您的问题。

I want to loop over all the users and their list of bookIDs to find out if there is a matching bookID in the book table. If not I need to insert that bookID into the book table

既然你这样做是愚蠢的,那么从以下开始:

  1. 选择每个用户

  2. 将书单字段分解为单独的 bookID

  3. 将它们添加到一组不同的(不重复)bookID 中。

  4. 一旦您获得了每个用户在该字段中曾经拥有过的每个 bookID,就可以循环遍历图书表。如果您在不同的集中没有找到任何 bookID,请将这些 bookID 插入到图书表中。

应该发生的是,您应该有一个单独的表“booklist”,其中包含一个 id 作为 PK,其中包含每个 userID 和每个 bookID。然后,您可以提取每个 userID 以及该 userID 拥有的每个 bookID,反之亦然。

我说得有道理吗?

编辑:我还意识到您可能应该尽可能高效地进行排序和搜索,但您确实提到这是一个一次性程序...

关于PHP/MySql : find missing records by comparing to lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9102319/

相关文章:

php - Mysqli连接设计

php - FFMPEG:如何在 FFMPEG Php 中使用 S3 url

java - 属性未找到异常 : Could not find setter for column_name on class

mysql - Magento 2重命名表元数据锁

mysql - 将子查询结果合并为文本

php - 用于在 PHP 中解析 HTML 的 CSS 选择器

php - mysqli 错误和警告

php - 在中使用时如何在MySQL中对行进行排序

mysql - 在 where 条件下计算个人总计的情况

MySQL (InnoDB) - 有多少连接才有意义?