我有 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
既然你这样做是愚蠢的,那么从以下开始:
选择每个用户
将书单字段分解为单独的 bookID
将它们添加到一组不同的(不重复)bookID 中。
一旦您获得了每个用户在该字段中曾经拥有过的每个 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/