2011-08-24 14 views
10

Potrzebuję napisać kod, który dotyczy tylko niektórych pól w naszej bazie danych. W szczególności szukam dowolnego pola we wszystkich tabelach pojedynczej bazy danych typu DECIMAL (12,5);Odzyskiwanie nazw MySQL, gdzie typ danych == X

Jeśli to pomoże, wszystkie nasze pola dziesiętne mają przedrostek dec_. Mógłbym zebrać wszystkie pola dziesiętne ze wszystkich tabel, ale jest ich mnóstwo, które nie pasują do moich konkretnych kryteriów, potrzebuję tylko wartości dziesiętnych, których limit wynosi 12,5.

Nie miałbym żadnych preferencji między robieniem tego w czystym SQL lub przy użyciu PHP. Obecnie używamy frameworka CakePHP do zarządzania naszym projektem, chociaż równie dobrze mogłem to zrobić bez korzystania z frameworka. Jest to jednorazowa operacja, w której zebrane są wymagane dane, dzięki czemu mogę kontynuować audyt.

Każda pomoc jest bardzo doceniana, dziękuję za poświęcenie czasu na przeczytanie tego.

[EDYTOWANIE] Mam tutaj świetne odpowiedzi, dzięki wszystkim! Prawdopodobnie powinienem był o tym wspomnieć w moim pierwszym poście, ale czy jest jakiś sposób, abym mógł uzyskać nazwę tabeli powiązaną z każdym polem?

Odpowiedz

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

Ta strona jest tak cholernie niesamowite! Dziękuję bardzo za szybką i dokładną odpowiedź! Chcę zagłosować na twoją odpowiedź, ale niestety nie mam jeszcze wystarczającej rep :-( – Zetaphor

+0

Ale możesz oznaczyć ją jako poprawną odpowiedź na swoje pytanie;) – Crack

+2

Można również po prostu zrobić "COLUMN_TYPE =" dziesiętny (12, 5) "Przede wszystkim OP będzie potrzebował dostępu do bazy danych" INFORMATION_SCHEMA ". – webbiedave

2

Można spróbować użyć następujące podejście:

$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

Spróbuj

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