2011-08-24 13 views
10

Ho bisogno di scrivere del codice che si applica solo a determinati campi all'interno del nostro database. Specificamente sto cercando qualsiasi campo in tutte le tabelle di un singolo database che sono di tipo DECIMAL (12,5);MySQL recupera i nomi delle colonne in cui il tipo di dati == X

Se è di aiuto, tutti i nostri campi decimali sono preceduti da dec_. Potrei raccogliere tutti i campi decimali da tutte le tabelle, ma ce ne sono molti che non corrispondono ai miei criteri particolari, ho bisogno solo dei valori decimali il cui limite è 12,5.

Non avrei alcuna preferenza tra l'operazione in SQL puro o l'utilizzo di PHP. Attualmente stiamo utilizzando il framework CakePHP per gestire il nostro progetto, anche se potrei farlo altrettanto facilmente senza utilizzare il framework. Questa operazione è una tantum per raccogliere i dati richiesti in modo da poter proseguire con l'audit.

Qualsiasi aiuto è molto apprezzato, grazie per aver dedicato del tempo a leggere questo.

[EDIT] Ho ottenuto delle ottime risposte qui, grazie a tutti! Probabilmente avrei dovuto dirlo nel mio post iniziale, ma c'è un modo in cui posso anche ottenere il nome della tabella associato a ciascun campo?

risposta

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

Questo sito è così dannatamente incredibile! Grazie mille per la tua risposta rapida e accurata! Voglio votare la tua risposta, ma purtroppo non ho ancora abbastanza repliche :-( – Zetaphor

+0

Ma puoi contrassegnarlo come risposta corretta alla tua domanda;) – Crack

+2

Puoi anche solo fare 'COLUMN_TYPE = 'decimale (12, 5) '' Soprattutto, OP avrà bisogno di accedere al database 'INFORMATION_SCHEMA'. – webbiedave

2

Si può provare a utilizzare il seguente approccio:

$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

Prova questa

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