2013-09-26 7 views
1

mySQL 데이터베이스가 설정되어 있고 연락처 정보가 서로 다른 여러 필드가있는 "연락처"테이블이 있습니다. 그것은 나에게 당황 스럽지만 나는 클라이언트가 DB에 추가 할 때 항상 "이메일"필드에 자신의 이메일 정보를 넣지는 않는다고 생각합니다. 모든 레코드의 모든 필드에서 '@'기호를 빠르고 쉽게 검색 할 수 있습니까? 그렇지 않다면 txt 파일에 '@'가 포함 된 문자열 만 남겨두기 위해 펄 라인이나 스크립트를 쓸어 주실 수 있습니까? 필자는 데이터 마사지를 위해 perl을 조사 할 계획이지만 지금은 시간이 없습니다. 감사!MySQL - 각 필드에서 특정 문자 검색

각 열에 대한

+0

'mysqldump'을 포함하거나 ... OUTFILE' INTO 것 너는 단지 궁금해. – tadman

답변

0

이 grep`는 당신이 경우 필요한 당신을 얻을 수있는 '모든 행을 반복하고 파일에 결과를 저장 약간의 열이 SELECT`@

#!/usr/bin/perl 
use strict; 
use warnings; 
use Data::Dumper; 
use DBI; 

my $dbh = DBI->connect('dbi:mysql:db_name','user','pass') 
    or die "Connection Error: $DBI::errstr\n"; 

my $sql = "select * from table"; 
my $sth = $dbh->prepare($sql); 
$sth->execute or die "SQL Error: $DBI::errstr\n"; 

open my $fh, ">", "output.txt" or die $!; 

while (my $r = $sth->fetchrow_hashref) { 
    $r->{$_} =~ /@/ and print $fh "Found '@' in column $_ of row:", Dumper $r 
    for keys %$r; 
} 
+0

할 수 있습니다. 감사합니다. 몇 가지 쿼리로 긴 방법을 수행하고 작업을 능가하지만 앞으로 이것을 사용할 것입니다. 나는 그것을 다시해야 할 것입니다. – aswaney

0

오스틴 당신은

SELECT * FROM table WHERE col1 LIKE '%@%' OR col2 LIKE '%@%' OR .... 

그냥 당신이 이메일 열을 생략 확인 할 수 있으며 잘못된 열에서 이메일이있을 수 있습니다 단지 행을 얻을 것이다.

이제 많은 컬럼을 가진 테이블이라는 정보를 포함 시켰습니다. 이는 설명 된 접근 방식의 장애물이므로 mysql의 데이터 딕셔너리를 사용하여 테이블의 컬럼 이름 목록을 생성 할 수 있습니다. 이 매크로를 지원하는 편집기를 사용하여 얻을 몇 분 안에 당신의 OR 절에 대한 열의 전체 목록을 구성 할 것을 사용할 정도로 쉬워야 열 이름으로

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='your_database' AND TABLE_NAME='your_table' AND COLUMN_NAME != 'email'; 

.

+0

고마워, 나는 그것을 할 것이다. 그러나 160 칼럼이있다. (이것은 내 시간 전에 만들어진 방법이다.) 웹 사이트를 영원히 바꿀만한 가치가없는 것으로 간주된다. (나는 여전히 블록에있는 새로운 아이이다.) – aswaney

+0

데이터베이스를 mysqldump하는 것이 더 쉽고 grep이나 텍스트 처리 perl과 같은 도구로 작업하는 것이 더 쉽을까요? –

+0

또는 단일 열에 대해 gview에서 제안한 내용을 수행 한 다음 [열을 반복] (https://www.google.com/search?q=mysql+loop+through+columns) – psxls

관련 문제