resueltos - Obtener nombres de tablas utilizando la instrucción SELECT en MySQL
consultas sql ejercicios resueltos (11)
Además de usar la tabla INFORMATION_SCHEMA, para usar SHOW TABLES para insertar en una tabla, usaría lo siguiente
<?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);
}
?>
En MySQL, sé que puedo enumerar las tablas en una base de datos con:
SHOW TABLES
Sin embargo, quiero insertar estos nombres de tabla en otra tabla, por ejemplo:
INSERT INTO metadata(table_name) SHOW TABLES /* does not work */
¿Hay alguna manera de obtener los nombres de tabla utilizando una instrucción SELECT estándar, algo así como:
INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
Creo que puede obtener los datos que desea de INFORMATION_SCHEMA TABLES.
Puede encontrar más información aquí: http://dev.mysql.com/doc/refman/5.0/en/tables-table.html
Creo que puede ser útil señalar que si desea seleccionar tablas que contengan palabras específicas, puede hacerlo fácilmente usando "SELECCIONAR" (en lugar de "MOSTRAR"). La consulta siguiente simplifica fácilmente la búsqueda en tablas que contienen "palabras clave"
SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"
Eche un vistazo a la tabla TABLES
en la base de datos information_schema
. Contiene información sobre las tablas en sus otras bases de datos. Pero si tienes un alojamiento compartido, probablemente no tengas acceso a él.
Hay otra manera más simple de obtener nombres de tablas
SHOW TABLES FROM <database_name>
La tabla MySQL INFORMATION_SCHEMA.TABLES contiene datos sobre ambas tablas (no temporales pero permanentes) y vistas. La columna TABLE_TYPE define si esto es registro para la tabla o la vista (para las tablas TABLE_TYPE = ''BASE TABLE'' y para las vistas TABLE_TYPE = ''VIEW''). Entonces, si quiere ver desde sus tablas de esquema (base de datos), solo está la siguiente consulta:
SELECT *
FROM information_schema.tables
WHERE table_type=''BASE TABLE''
AND table_schema=''myschema''
Para insertar, actualizar y eliminar, haga lo siguiente:
$teste = array(''LOW_PRIORITY'', ''DELAYED'', ''HIGH_PRIORITY'', ''IGNORE'', ''INTO'', ''INSERT'', ''UPDATE'', ''DELETE'', ''QUICK'', ''FROM'');
$teste1 = array("/t", "/n", "/r", "/0", "/x0B");
$strsql = trim(str_ireplace($teste1, '' '', str_ireplace($teste, '''', $strsql)));
$nomeTabela = substr($strsql, 0, strpos($strsql, '' ''));
print($nomeTabela);
exit;
Para obtener el nombre de todas las tablas, use:
SELECT table_name FROM information_schema.tables;
Para obtener el nombre de las tablas de una base de datos específica, use:
SELECT table_name FROM information_schema.tables where table_schema=''<your_database_name>'';
Ahora, para responder la pregunta original, use esta consulta:
INSERT INTO <table_name>
SELECT table_name FROM information_schema.tables
WHERE table_schema = ''<your_database_name>'';
Para obtener más detalles, consulte: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html
Tratar:
select * from information_schema.tables
Ver: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html
si tenemos múltiples bases de datos y necesitamos seleccionar todas las tablas para una base de datos en particular, podemos usar TABLE_SCHEMA
para definir el nombre de la base de datos como:
select table_name from information_schema.tables where TABLE_SCHEMA=''dbname'';
SELECT table_name
FROM information_schema.tables
WHERE table_schema = DATABASE()