2011-12-22 2 views
3

나는 그것이 존재하는 곳이라면 언제든지 문자열을 찾기 위해 쿼리를 작성하고 싶다. 같이 일하는 것이
뭔가 :모든 테이블과 모든 열에서 문자열을 찾는 방법은 무엇입니까?

foreach(table in database) { 
    foreach(column in table) { 
     // in the end, i need to know, which columns in 
     // which tables that string appears. 
    } 
} 

이 가능합니까?

+3

[XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) 일 수 있습니까? 현재 요구 사항에 대한 추론을 해줄 수 있습니까? – Bojangles

+1

어쨌든, 나는 * this * 문제에 대한 해결책에 관심이 있습니다 - 확실히 사용할 수 있습니다. * 내 * 이유는 URL이 전체 사이트에서 라이브로 이동 한 후 (제어판의 유틸리티) IP 주소에서 업데이트하는 것입니다. 현재 검색을 위해 테이블 ​​/ 열을 등록하는 시스템이 있지만 더 쉬울 것입니다. . –

+0

고마워, Jam,하지만이게 내가 필요한거야. 나는 무한히 크고 지저분한 데이터베이스를 골라 내었고, 어떤 가치가있는 곳을 알아야했습니다. –

답변

2

이유는 무엇입니까? 솔직히, 런타임에해야 할 일이 아니라면, mysqldump을 사용하고 텍스트 편집기를 사용하여 검색을 수행합니다.

런타임에이 작업을 수행해야하는 경우 동적으로 무언가를 만들어야합니다. "show tables"을 사용하여 표 목록을 가져올 수 있습니다. 그런 다음 각 테이블에 show columns을 사용할 수 있습니다. 그런 다음 각 열에 대해 텍스트를 찾는 일종의 select 문을 수행해야합니다 (예 : locate 또는 using을 사용).

이 서버에서 실시간으로 실행하기 위해 정말 느린 과정이 될 것입니다 ...

+0

덕분에, 덤프 솔루션은 아마 나를 위해 일할 것입니다. 정적으로 수행해야 할 것이기 때문에 런타임에는 아니지만, 가장 우아한 가설을 알고 싶습니다. mySQL을 통해 직접 할 수 있습니다. –

0

예,이 가능합니다. 그러나 나는 당신이 순수한 SQL로 그것을 할 수 있다고 생각하지 않는다. PHP 나 쉘 스크립트와 같은 스크립트 언어에서 사용하는 것이 좋습니다.

0

메타 데이터 (예 : 열 이름)와 데이터 (예 : 필드 값)가 동일한 쿼리에 포함될 수 없으므로 (현재) MySQL에서는 불가능합니다.

특히

SELECT Field from (DESCRIBE <tablename>) 

은 에러 출력한다 윌

SELECT Field from (SHOW FIELDS FROM <tablename>) 

같은 저장 프로 시저

DECLARE flds CURSOR FOR DESCRIBE <tablename> 

것이다.

이것은 말하자면 INSITE MYSQL은 불가능합니다. PHP와 freinds에서는 사소한 것입니다.

관련 문제