Meu banco de dados possui uma quantidade desconhecida de tabelas, nomeadas com o mesmo prefixo seguido de uma string aleatória: _ct_<random_string>
.
Cada uma dessas tabelas tem a mesma estrutura de dados.
Também tenho outra tabela na qual armazeno o nome de cada tabela para referência futura.
O nome da tabela a seguir é 'content_types' e fornece referência para outras tabelas:
+-----------------+
| id | table_name |
+-----------------+
| 1 | _ct_table1 |
| 2 | _ct_table2 |
| 3 | _ct_table3 |
| 4 | _ct_fdfsf |
| 5 | _ct_535dgf |
...
+-----------------+
Seguem exemplos das tabelas referenciadas em 'content_types'.'table_name':
_ct_table1: _ct_table2:
+-----------------------------------+ +-----------------------------------+
| id | title | subtitle | date | | id | title | subtitle | date |
+-----------------------------------+ +-----------------------------------+
| 1 | fddfs | ... | 2012-08-22| | 4 | fddfs | ... | 2012-03-18|
| 2 | bdsf | | 2012-08-22| | 5 | b4sf | dfs | 2012-07-20|
| 3 | sfdsd | | 2012-08-22| | 6 | sfdsd | | 2012-03-12|
+-----------------------------------+ +-----------------------------------+
É possível criar uma consulta com uma UNION
instrução dinâmica baseada nas tabelas listadas em 'content_types'.'table_name'?
Algo assim:
select id,title,subtitle,date
from
(
select table_name
from content_types
);
Sim você pode. Existem várias maneiras de fazer isso.
1> Se você estiver usando o banco de dados de forma interativa, basta digitar a consulta. 2> Se o banco de dados estiver sendo acessado por meio de um aplicativo ou script, escreva um método no aplicativo/script para criar a consulta necessária e, em seguida, execute-o. Você teria uma chamada de banco de dados para obter a lista de nomes de tabelas, criar uma string com a consulta de união e executar essa consulta. 3> De maneira semelhante à opção 2, a maioria das linguagens de procedimento armazenado permite que você crie dinamicamente uma consulta como uma string e, em seguida, execute essa string - Confira a documentação do seu banco de dados para descobrir como fazer isso.
Um exemplo Mysql https://stackoverflow.com/questions/190776/how-to-have-dynamic-sql-in-mysql-stored-procedure . Você pode usar um cursor ( http://dev.mysql.com/doc/refman/5.0/en/cursors.html ) para percorrer a lista de nomes de tabelas para Concat ( http://dev.mysql.com /doc/refman/5.0/en/string-functions.html#function_concat ) junto com a string de consulta.