MySQL извлекает имена столбцов, где datatype == X

Мне нужно написать код, который применяется только к определенным полям в нашей базе данных. В частности, я ищу любое поле во всех таблицах одной базы данных типа DECIMAL (12,5);

Если какая-либо помощь, все наши десятичные поля имеют префикс dec_. Я мог бы собрать все десятичные поля из всех таблиц, но есть тонны из них, которые не соответствуют моим конкретным критериям, мне нужны только десятичные значения, которые ограничивают 12,5.

У меня не было бы предпочтения делать это в чистом SQL или с помощью PHP. В настоящее время мы используем фреймворк CakePHP для управления нашим проектом, хотя я мог бы так же легко сделать это, не используя фреймворк. Это одноразовая операция по сбору необходимых данных, чтобы я мог продолжить проверку.

Любая помощь очень ценится, спасибо, что нашли время, чтобы прочитать это.

[EDIT] Получил отличные ответы здесь, спасибо всем! Вероятно, я должен был упомянуть об этом в своем первом сообщении, но есть ли способ получить имя таблицы, связанную с каждым полем?

Ответ 1

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

Ответ 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()) ;  
}

Ответ 3

Попробуйте это

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