Ответ 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
Мне нужно написать код, который применяется только к определенным полям в нашей базе данных. В частности, я ищу любое поле во всех таблицах одной базы данных типа DECIMAL (12,5);
Если какая-либо помощь, все наши десятичные поля имеют префикс dec_. Я мог бы собрать все десятичные поля из всех таблиц, но есть тонны из них, которые не соответствуют моим конкретным критериям, мне нужны только десятичные значения, которые ограничивают 12,5.
У меня не было бы предпочтения делать это в чистом SQL или с помощью PHP. В настоящее время мы используем фреймворк CakePHP для управления нашим проектом, хотя я мог бы так же легко сделать это, не используя фреймворк. Это одноразовая операция по сбору необходимых данных, чтобы я мог продолжить проверку.
Любая помощь очень ценится, спасибо, что нашли время, чтобы прочитать это.
[EDIT] Получил отличные ответы здесь, спасибо всем! Вероятно, я должен был упомянуть об этом в своем первом сообщении, но есть ли способ получить имя таблицы, связанную с каждым полем?
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
Вы можете попробовать использовать следующий подход:
$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()) ;
}
Попробуйте это
SELECT table_name, column_name
FROM information_schema.columns where data_type = 'INT'