关于如何在数据库中查找重复项有很多问题,但不是我遇到的具体问题。
我有一张桌子大约。120000 个条目。我需要找到重复项。为了找到它们,我使用了一个结构如下的 php 脚本:
//get all entries from database
//loop through them
//get entries with greater id
//compare all of them with the original one
//update database (delete duplicate, update information in linked tables, etc.)
不可能对初始查询中已经存在的所有重复项进行排序,因为我必须遍历所有条目,因为我的重复搜索不仅对 100% 相似的条目敏感,而且对 90% 相似的条目敏感。我为此使用了similar_text()。
我认为第一个循环还可以,但是循环遍历循环中的所有其他条目实在是太多了。对于 120000 个条目,这将接近 (120000^2)/2 次迭代。
因此,与其在循环中使用循环,不如有更好的方法来做到这一点。你有什么想法?我考虑过使用 in_array(),但它对 90% 的字符串相似度之类的东西不敏感,也没有给我找到重复项的数组字段——我需要那些来获取条目的 id 来更新数据库正确。
有任何想法吗?
非常感谢你!
查尔斯
更新 1
我现在使用的查询如下:
SELECT a.host_id
FROM host_webs a
JOIN host_webs b ON a.host_id != b.host_id AND a.web = b.web
GROUP BY a.host_id
它完美地显示了原件和副本,但我需要摆脱原件,即与相关数据一起找到的第一个。我怎样才能做到这一点?