Php 在mysql中组织更改字段值
我需要对数据库中的一列进行排序,该列是我的分类结构该列中的数据是城市名称,但并非每个城市的所有名称都相同,我需要做的是遍历列中的值,我可能有20-40个值,它们是相同的城市,但写的不同。我需要一个脚本,可以解释它们,并将它们更改为单个值Php 在mysql中组织更改字段值,php,mysql,perl,Php,Mysql,Perl,我需要对数据库中的一列进行排序,该列是我的分类结构该列中的数据是城市名称,但并非每个城市的所有名称都相同,我需要做的是遍历列中的值,我可能有20-40个值,它们是相同的城市,但写的不同。我需要一个脚本,可以解释它们,并将它们更改为单个值 所以我可能在城市栏中有两个值,分别是:(英格兰>伦敦)和(西伦敦),但我需要换成伦敦,是否有一个脚本能够解释已经存在的值并将其更改为值?我想知道一个接一个地执行此操作的困难方法,但我想知道是否有任何语言的脚本可以完成此操作。只是一个想法:16K并不重要。首先使用
所以我可能在城市栏中有两个值,分别是:(英格兰>伦敦)和(西伦敦),但我需要换成伦敦,是否有一个脚本能够解释已经存在的值并将其更改为值?我想知道一个接一个地执行此操作的困难方法,但我想知道是否有任何语言的脚本可以完成此操作。只是一个想法:16K并不重要。首先使用Perl的
DBI
(我假设您将使用Perl)获取该城市列,将其存储在散列中(城市名称作为散列),然后找到适合您需要的算法(性能方面)来迭代散列键,并使用字符串::Diff
查找匹配的交集(阅读它,它肯定可以帮助您)并将其存储为一个值。然后您可以使用它来更新数据库,使用键(旧值)并将该值作为要更新的新值。我已经多次进行此类数据清理,恐怕没有什么比编写自己的修复更简单的了
我可以推荐的一件事是使流程可重复。使用类似(rulenum、pattern、new_值)的替换表。然后,处理表中相关位的副本,以便重新运行整个脚本
然后,你可以从明显的匹配开始(看看什么看起来似乎合理),然后转移到更模糊的匹配。最终,你将有50个不匹配项,你可以手动修补这些项
使其可重复是很重要的,因为在最初的几次尝试中,您肯定会发现不匹配
比如(语法未测试):
我认为你运气不好。你所能做的就是像通配符一样查找“%LONDON%”,但是没有办法编写代码来确定应该映射到哪里,除非你事先弄清楚。我不太确定为什么有人否决了你,我认为这是一个好问题,所以我将你调回0。我想知道是否有有一个程序可以做到这一点…我想我可能不太走运我到处都在搜索我以为有人会在我拥有16000多个类别之前遇到这个问题那不包括重复/变化
CREATE TABLE matches (rule_num int PRIMARY KEY, pattern text, new_value text)
CREATE TABLE cityfix AS
SELECT id, city AS old_city, '' AS new_city, 0 AS match_num FROM locations;
UPDATE c SET c.new_city = m.new_value, c.match_num = m.rule_num
FROM cityfix AS c JOIN matches m ON c.old_city LIKE m.pattern
WHERE c.match_num = 0;
-- Review results, add new patterns to rule_num, repeat UPDATE
-- If you need to you can drop table cityfix and repeat it.