Esempio generico (in PHP):
Costruire SQL dinamico o costruire le tue query SQL con l'aiuto di un linguaggio di programmazione sarebbe simile a questo (in PHP per es.):
$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();
$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);
Il fetchAll
restituirà un array contenente i nomi di ogni tabella selezionata.
Il implode($glue, $array)
La funzione prende un array e concatena ogni valore nell'array usando il $glue
parametro - di solito prendi un array di valori e li implodi usando $glue = ','
per creare un elenco di valori separati da coma.
Nel nostro caso il implode
ha una query parziale come $glue
per creare un grande UNION JOIN
interrogazione.
Dopo la $query
finale è costruito dovrebbe assomigliare a:
SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name
Il risultato dovrebbe contenere tutto il DISTINCT
righe da tutte le 4000 tabelle.
Esempio specifico (in formato solo SQL):
SELECT GROUP_CONCAT(
CONCAT('select * from ', table_name)
SEPARATOR ' union '
)
INTO @my_variable
FROM information_schema.tables
WHERE table_schema = 'dbname'
AND table_name LIKE '%_name';
PREPARE my_statement FROM @my_variable;
EXECUTE my_statement;
- La prima istruzione otterrà tutti i nomi delle tabelle dallo
information_schema
banca dati; - Il
CONCAT
La funzione antepone a ogni nome di tabella un'SELECT * FROM '
stringa; - Il
GROUP_CONCAT
fa il lavoro cheimplode
avrebbe fatto in PHP; -
Il
INTO
La clausola assicura che i valori siano salvati all'interno di una variabile denominatamy_variable
; -
Il
PREPARE
accetta un valore stringa (come quello che hai salvato inmy_variable
) e controlla se il valore è una query SQL; - Il
EXECUTE
istruzione prende una "istruzione preparata" e beh... la esegue.
@my_variable è una variabile temporanea ma può essere solo di tipo scalare (varchar, int, date, datetime, binary, float, double ecc.) non una matrice.
Il GROUP_CONCAT
function è una "funzione aggregata", il che significa che prende un valore aggregato (concetto simile a un array - nel nostro caso il set di risultati della nostra query) e restituisce un semplice risultato di stringa.