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_schemabanca dati; - Il
CONCATLa funzione antepone a ogni nome di tabella un'SELECT * FROM 'stringa; - Il
GROUP_CONCATfa il lavoro cheimplodeavrebbe fatto in PHP; -
Il
INTOLa clausola assicura che i valori siano salvati all'interno di una variabile denominatamy_variable; -
Il
PREPAREaccetta un valore stringa (come quello che hai salvato inmy_variable) e controlla se il valore è una query SQL; - Il
EXECUTEistruzione 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.