2010-08-26 28 views
8

Tengo muchas tablas en mi base de datos, todas con la misma estructura. Quiero seleccionar de todas las tablas sin tener que enumerarlas todas, así:Seleccionar de todas las tablas

SELECT name FROM table1,table2,table3,table4 

Y he intentado, pero esto no funciona:

SELECT name FROM * 

¿Hay una manera de seleccionar todas las tablas de una base de datos sin listar cada tabla en la consulta?

+0

Probablemente necesite hacer una unión: su solución a continuación puede modificarse para crear una instrucción sql dinámica que responda como 'Seleccionar * de table1 union select * de la tabla 2 unión ..' –

+0

Lo siento, pero esto suena como una realidad mal diseño de aplicaciones. ¡Si tiene tablas con la misma estructura, realmente debería considerar poner sus datos en una sola tabla! –

Respuesta

0

Suena como si quisiera unir todas las tablas para obtener los resultados como si fueran una gran mesa. Tendrá que escribir la consulta en su totalidad como

SELECT * FROM table1 UNION SELECT * FROM table2 UNION ... SELECT * FROM tableN 

Copia & pasta puede ser su amigo.

Tengo curiosidad por saber por qué tiene muchas tablas diferentes con la misma estructura?

+0

estoy trabajando en un explorador de archivos en línea, cada directorio tiene su propia tabla "archivos/imágenes /, archivos/videos /, archivos/música /" y así sucesivamente los registros en cada tabla son los detalles de los archivos descripción del nombre de tamaño y así sucesivamente. originalmente tenía todos los archivos enumerados en una tabla.pero tenía más de 5,000 registros y las consultas eran lentas, así que ahora las tablas se crean automáticamente cada vez que agrego un directorio, los registros se almacenan automáticamente cada vez que se cargan los archivos, ahora intento crear una función de búsqueda para los usuarios y quiero buscar en todos los directorios o tablas – dlaurent86

+6

'cada directorio tiene su propia tabla' OMG –

+2

Cuando su consulta es lenta con 5000 registros, es tiempo de hacer una indexación o cambiar la estructura de la tabla. Crear una tabla para cada directorio será más un problema de rendimiento que tener una sola tabla con el índice y el diseño adecuados. – DrColossos

1

Por lo que sé, no hay tales comodines para seleccionar de * todas las tablas. Yo recomendaría escribir un view y luego llamar a ese view en su lugar (le ahorrará escribir los nombres cada vez) - VoodooChild

1

Encontré una solución, pero me gustaría saber si hay una manera más simple o una mejor solución.

Pero aquí es lo que ocurrió:

$tables = mysql_query("show tables"); 
$string = ''; 
while ($table_data = mysql_fetch_row($tables)){ 
    $string.=$table_data[0].','; 
} 
$ALL_TABLES = substr($string,0,strlen($string)-1); 
$sql="SELECT name FROM $ALL_TABLES "; 
+0

Todavía creo que desea unir cada tabla, porque especificar "tabla1, tabla2, tabla3", etc. en una cláusula FROM implica que quiere * unir * las tablas (no es lo mismo que anexarlas secuencialmente), y no incluyendo cualquier criterio para la unión significa que obtendrá un producto cartesiano. – sasfrog

+2

No recomiendo este enfoque, pero tengo una pista para usted: http://www.php.net/implode –

+0

, sí, de acuerdo, he estado despierto toda la noche tratando de hacerlo bien. y mi solución no funcionó porque cuando traté de ejecutar "SELECT nombre FROM $ ALL_TABLES" recibí este error "Error MySQL: # 1052 - Columna 'id' en la lista de campos es ambigua" así que terminé haciendo un tabla de búsqueda con todos los archivos dentro de la tabla y acabo de hacer una búsqueda de texto completo en esta tabla – dlaurent86

1

Eso significa que usted no debe tener un montón de mesas con una misma estructura en absoluto.
Pero solo una tabla con un campo para distinguir diferentes tipos de datos, cualquiera que sea.

A continuación, seleccione todo, no habría problema.

5

i am working on a online file browser, each directory has its own table

Es muy inútil debido a una razón: cuando se tiene cerca de 200 archivos (esta situación es real, ¿no?) Que tiene alrededor de 200 tablas. Y si hay cerca de mil archivos en cada directorio ... etc. En algún momento tendrá un procesamiento lento mientras selecciona de su base de datos tener que comprar más recursos del servidor.

creo que debe cambiar su estructura de base de datos: acaba de comenzar la adición de parent_folder_id columna a la tabla, después de esto se puede poner todas sus filas (archivos y directorios - porque directorio es un archivo también - aquí se puede añadir type columna para determinar esto) en la una tabla.

+0

Por último, un chico que pregunta a la solución general. –

Cuestiones relacionadas