2011-08-24 2 views
10

데이터베이스 내 특정 필드에만 적용되는 코드를 작성해야합니다. 특히 나는 DECIMAL (12,5) 유형의 단일 데이터베이스의 모든 테이블에서 모든 필드를 찾고 있습니다.MySQL은 데이터 형이 == X 인 열 이름 검색

도움이된다면 모든 십진수 필드 앞에 dec_가 붙습니다. 모든 테이블에서 십진수 필드를 모두 모을 수 있지만 그 중 특정 기준과 일치하지 않는 톤이 있습니다. 소수점 이하 12.5 자만 필요합니다.

필자는이 작업을 순수 SQL로 수행하거나 PHP를 사용하지 않을 것입니다. 우리는 현재 CakePHP 프레임 워크를 사용하여 프로젝트를 관리하고 있지만, 프레임 워크를 사용하지 않고도이 작업을 쉽게 수행 할 수 있습니다. 이것은 필요한 데이터를 수집하는 1 회 작업이므로 감사를 계속할 수 있습니다.

도움을 주시면 대단히 감사 드리며 시간을내어 읽어 주셔서 감사합니다.

[편집] 여기에 멋진 답변이 있습니다. 감사합니다 모두들! 아마 처음 게시물에서 언급 했어야하지만, 각 필드와 관련된 테이블 이름을 얻을 수있는 방법이 있습니까?

답변

18
SELECT 
    TABLE_NAME, 
    COLUMN_NAME 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'db-name' AND 
    DATA_TYPE = 'decimal' AND 
    NUMERIC_PRECISION = 12 AND 
    NUMERIC_SCALE = 5 
+0

이 사이트를보십시오 그렇게 빌어 먹을 굉장하다! 신속하고 정확한 답변을 해주셔서 대단히 감사합니다! 나는 당신의 응답을 투표하고 싶다. 그러나 아아 나는 충분한 담당자가 아직 없다 :-( – Zetaphor

+0

그러나 당신은 당신의 질문에 대한 정답으로 표시 할 수있다;) – Crack

+2

'COLUMN_TYPE ='decimal (12, 5) ''가장 중요한 점은 OP가 'INFORMATION_SCHEMA' 데이터베이스에 액세스해야한다는 것입니다. – webbiedave

2

당신은 다음과 같은 방법을 사용하려고 할 수 있습니다

$pdo = new PDO(...); 

$sql = "select column_name from 
    information_schema.columns 
    where table_schema='$your_db' and table_name='?' and data_type = 'decimal(12,5)'"; 

foreach($pdo->query("SHOW TABLES;") as $table) { 
    $prepared = $pdo->prepare($sql); 
    $prepared->execute(array($table)); 
    print_R($prepared->fetchAll()) ; 
} 
0

SELECT table_name, column_name 
FROM information_schema.columns where data_type = 'INT'