En MySQL, je sais que je peux lister les tables dans une base de données avec:
SHOW TABLES
Cependant, je veux insérer ces noms de table dans une autre table, par exemple:
INSERT INTO metadata(table_name) SHOW TABLES /* does not work */
Est-il possible d'obtenir les noms de table à l'aide d'une instruction SELECT standard, comme par exemple:
INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
Pour obtenir le nom de toutes les tables, utilisez:
SELECT table_name FROM information_schema.tables;
Pour obtenir le nom des tables d'une base de données spécifique, utilisez:
SELECT table_name FROM information_schema.tables where table_schema='your_database_name';
Maintenant, pour répondre à la question initiale, utilisez cette requête:
INSERT INTO table_name
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';
Pour plus de détails, voir: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html
Essayer:
select * from information_schema.tables
Voir: http://dev.mysql.com/doc/refman/5.0/fr/information-schema.html
si nous avons plusieurs bases de données et que nous devons sélectionner toutes les tables d'une base de données particulière, nous pouvons utiliser TABLE_SCHEMA
pour définir le nom de la base de données comme suit:
select table_name from information_schema.tables where TABLE_SCHEMA='dbname';
Outre l’utilisation de la table INFORMATION_SCHEMA, pour utiliser SHOW TABLES et pour insérer dans une table,
<?php
$sql = "SHOW TABLES FROM $dbname";
$result = mysql_query($sql);
$arrayCount = 0
while ($row = mysql_fetch_row($result)) {
$tableNames[$arrayCount] = $row[0];
$arrayCount++; //only do this to make sure it starts at index 0
}
foreach ($tableNames as &$name {
$query = "INSERT INTO metadata (table_name) VALUES ('".$name."')";
mysql_query($query);
}
?>
Jetez un coup d'œil à la table TABLES
dans la base de données information_schema
. Il contient des informations sur les tables de vos autres bases de données. Mais si vous êtes sur l'hébergement partagé, vous n'y avez probablement pas accès.
Je pense que vous pouvez obtenir les données souhaitées à partir de INFORMATION_SCHEMA TABLES.
Vous pouvez trouver plus d'infos ici: http://dev.mysql.com/doc/refman/5.0/fr/tables-table.html
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'DATABASE'
La table MySQL INFORMATION_SCHEMA.TABLES
contient des données sur les tables (non temporaires mais permanentes) et les vues. La colonne TABLE_TYPE
définit s'il s'agit d'un enregistrement de table ou de vue (pour les tables TABLE_TYPE='BASE TABLE'
et pour les vues TABLE_TYPE='VIEW'
). Donc, si vous voulez voir à partir de vos tables de schéma (base de données) uniquement, la requête suivante:
SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'
Je pense qu'il peut être utile de souligner que si vous souhaitez sélectionner des tableaux contenant des mots spécifiques, vous pouvez facilement le faire en utilisant la variable SELECT
(au lieu de SHOW
). La requête ci-dessous réduit facilement la recherche aux tables contenant "mot clé"
SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"
Il y a encore un autre moyen plus simple d'obtenir des noms de table
SHOW TABLES FROM <database_name>