Generisk eksempel (i PHP):
At konstruere dynamisk SQL eller bygge dine SQL-forespørgsler ved hjælp af et programmeringssprog ville se sådan ud (f.eks. i PHP):
$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();
$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);
fetchAll metoden returnerer et array, der indeholder navnene på hver valgt tabel.
implode($glue, $array) funktion tager et array og sammenkæder hver værdi i arrayet ved hjælp af $glue parameter - normalt tager du en række værdier og imploderer dem ved hjælp af $glue =',' for at oprette en komasepareret liste over værdier.
I vores tilfælde implode har en delvis forespørgsel som $glue for at skabe én stor UNION JOIN forespørgsel.
Når den sidste $query er bygget, skal det ligne:
SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name
Resultatet skal indeholde alle DISTINCT rækker fra alle 4000 tabeller.
Specifikt eksempel (kun i SQL-format):
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;
- Den første sætning får alle tabelnavnene fra
informationsskemaetdatabase; CONCATfunktion præfikser hvert tabelnavn med et'SELECT * FROM 'streng;GROUP_CONCATudfører det job, derimplodererville have gjort i PHP;-
INTOklausul sørger for, at værdierne er gemt i en variabel ved navnmin_variabel; -
PREPAREsætning tager en strengværdi (såsom den du gemte imin_variabel) og kontrollerer, om værdien er en SQL-forespørgsel; EXECUTE statement tager en "forberedt erklæring" og vel... udfører den.
@my_variable er en midlertidig variabel, men den kan kun være af en skalartype (varchar, int, dato, datetime, binær, float, double osv.) den er ikke et array.
GROUP_CONCAT funktion er en "aggregeret funktion", hvilket betyder, at den tager en aggregeret værdi (svarende koncept til en matrix - i vores tilfælde resultatsættet af vores forespørgsel) og udsender et simpelt strengresultat.