2012-09-13 2 views
1

내 데이터베이스의 열을 정렬해야합니다.이 열은 내 카테고리 구조입니다. 열의 데이터는 도시 이름이지만 모든 이름이 각 도시마다 동일하지는 않습니다. 필요한 항목 해야 할 칼럼의 값을 통과한다 나는 같은 도시이지만 다르게 쓰여진 20-40 값을 가질 수있다. 해석 할 수있는 스크립트가 필요하고 단일 값으로 바꿀 수있는 스크립트가 필요하다.mysql에서 변경 필드 값 구성

그래서 나는 두 개의 값을 가질 수있다. 도시 열의 말 : (잉글랜드> 런던)과 (westlondon)하지만 런던으로 변경해야합니다, 이미 거기에 값을 해석 할 수있는 거기에 스크립트가 거기에 값을 변경하려면 내가 원하는 것입니다 이 작업을 하나씩 수행하는 다소 어려운 방법을 알고 있지만 완료 할 수있는 언어로 된 스크립트가 있는지 궁금해했습니다. 이

+0

난 당신이 운이 것 같아요. 할 수있는 일은 '% LONDON %'을 (를) 찾기 위해 와일드 카드를 사용하는 것입니다. 그러나 미리 알아 내지 않은 경우를 제외하고 어디로 매핑해야하는지 파악하는 방법은 없습니다. – andrewsi

+0

왜 누군가가 당신을 하향 투표했는지 확실하지 않습니다. 나는 좋은 질문이라고 생각한다. 그래서 나는 0까지 되돌려 놓는다. 이걸 할 수있는 프로그램이 있는지 알아 보는 것은 흥미로울 것이다 ... –

+0

나는이 곳에서 나는 행운이 될지도 모른다. 내가 16,000 이상의 카테고리를 가지기 전에 누군가가이 문제를 보았을 것이라고 생각했다. – dom

답변

2

필자는 이러한 종류의 데이터 정리를 여러 차례 수행했으며 사용자가 직접 수정 프로그램을 작성하는 것보다 쉽지는 모릅니다.

내가 추천 할 수있는 한 가지는 프로세스를 반복적으로 만드는 것입니다. (rulenum, pattern, new_value)와 같은 대체 테이블을 가져라. 그런 다음 테이블의 관련 비트 복사본으로 작업하여 전체 스크립트를 다시 실행할 수 있습니다.

그런 다음 확실한 것으로 시작하여 (그럴듯하게 보입니다) 더 애매한 것으로 이동하십시오. 궁극적으로 당신은 일치가없는 50을 가지게 될 것이고 당신은 수동으로 이것에 대한 엔트리를 패치 할 수 있습니다.

반복적으로 만드는 것은 처음 몇 번의 시도에서 잘못 일치하는 것을 찾기 쉽기 때문에 중요합니다.

그래서, (검증되지 않은 구문) 같은 일이 :

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. 
1

그냥 생각 : 16K 너무하지 않습니다. 먼저 Perl의 DBI (여러분이 Perl을 사용한다고 가정 할 때)을 사용하여 해당 도시 열을 가져 와서 해시 (도시 이름은 해시)에 저장 한 다음 필요에 따라 (성능면에서) 알고리즘을 찾아서 해시 키를 사용하고 String::Diff을 사용하여 일치하는 교차점을 찾으십시오 (그것에 대해 읽으십시오, 확실히 도움이 될 수 있습니다). 값으로 저장하십시오. 그런 다음 키 (이전 값)와 값을 사용하여 데이터베이스를 업데이트하는 데 사용할 수 있습니다. 업데이트 할 새 값.