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
informationsskemaet
database; CONCAT
funktion præfikser hvert tabelnavn med et'SELECT * FROM '
streng;GROUP_CONCAT
udfører det job, derimploderer
ville have gjort i PHP;-
INTO
klausul sørger for, at værdierne er gemt i en variabel ved navnmin_variabel
; -
PREPARE
sæ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.