2011-08-24 15 views
10

Necesito escribir algún código que se aplique solo a ciertos campos dentro de nuestra base de datos. Específicamente, estoy buscando cualquier campo en todas las tablas de una única base de datos que sean del tipo DECIMAL (12,5);MySQL recupera los nombres de columna donde datatype == X

Si es de alguna ayuda, todos nuestros campos decimales tienen el prefijo dec_. Podría reunir todos los campos decimales de todas las tablas, pero hay toneladas de ellos que no coinciden con mis criterios particulares, solo necesito los valores decimales cuyo límite es 12,5.

No tendría ninguna preferencia entre hacer esto en SQL puro, o usar PHP. Actualmente estamos usando el marco de CakePHP para administrar nuestro proyecto, aunque podría hacerlo fácilmente sin usar el marco. Esta es una operación de una sola vez para recopilar los datos necesarios para poder continuar con la auditoría.

Cualquier ayuda es muy apreciada, gracias por tomarse el tiempo para leer esto.

[EDITAR] ¡Obtuve algunas respuestas excelentes aquí, gracias a todos! Probablemente debería haber mencionado esto en mi publicación inicial, pero ¿hay alguna forma en que también pueda obtener el nombre de la tabla asociada a cada campo?

Respuesta

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

Este sitio es tan jodidamente increíble! ¡Muchas gracias por su respuesta rápida y precisa! Quiero votar su respuesta, pero lamentablemente aún no tengo suficientes representantes :-( – Zetaphor

+0

Pero puede marcarla como la respuesta correcta a su pregunta;) – Crack

+2

También podría hacer 'COLUMN_TYPE = 'decimal (12, 5) "Lo más importante es que OP necesitará acceder a la base de datos' INFORMATION_SCHEMA'. – webbiedave

2

Usted puede tratar de utilizar el siguiente enfoque:

$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

probar este

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