Ogólny przykład (w PHP):
Konstruowanie dynamicznego SQL lub budowanie zapytań SQL za pomocą języka programowania wyglądałoby tak (np. w PHP):
$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();
$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);
fetchAll metoda zwróci tablicę zawierającą nazwy każdej wybranej tabeli.
implode($glue, $array) funkcja pobiera tablicę i łączy wszystkie wartości w tablicy za pomocą $glue parametr - zwykle bierzesz tablicę wartości i implodujesz je za pomocą $glue = ',' aby utworzyć listę wartości oddzielonych przecinkami.
W naszym przypadku implode ma częściowe zapytanie jako $glue w celu stworzenia jednego dużego UNION JOIN zapytanie.
Po ostatnim $query jest zbudowany, powinien wyglądać mniej więcej tak:
SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name
Wynik powinien zawierać wszystkie DISTINCT wiersze ze wszystkich 4000 tabel.
Konkretny przykład (tylko w formacie 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;
- Pierwsza instrukcja pobierze wszystkie nazwy tabel z
information_schemabaza danych; CONCATfunkcja poprzedza każdą nazwę tabeli przedrostkiem'SELECT * FROM 'ciąg;GROUP_CONCATwykonuje zadanie, któreimplodezrobiłbym w PHP;-
INTOklauzula zapewnia, że wartości są zapisywane wewnątrz zmiennej o nazwiemy_variable; -
PREPAREinstrukcja przyjmuje wartość ciągu (taką jak ta, którą zapisałeś wmy_variable) i sprawdza, czy wartość jest zapytaniem SQL; EXECUTEinstrukcja pobiera "przygotowaną instrukcję" i cóż... wykonuje ją.
@moja_zmienna jest zmienną tymczasową, ale może być tylko typu skalarnego (varchar, int, date, datetime, binarny, float, double itp.), nie tablica.
GROUP_CONCAT funkcja jest "funkcją agregującą", co oznacza, że pobiera wartość zagregowaną (pojęcie podobne do tablicy - w naszym przypadku zestaw wyników naszego zapytania) i wyprowadza prosty wynik w postaci ciągu.