Общ пример (в PHP):
Конструирането на динамичен SQL или изграждането на вашите SQL заявки с помощта на език за програмиране ще изглежда така (напр. в PHP):
$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();
$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);
fetchAll ще върне масив, съдържащ имената на всяка избрана таблица.
implode($glue, $array) функцията взема масив и свързва всяка стойност в масива с помощта на $glue параметър - обикновено вземате масив от стойности и ги имплодирате с помощта на $glue = ',' за създаване на списък със стойности, разделени със запетая.
В нашия случай implode има частична заявка като $glue за да създадете едно голямо UNION JOIN заявка.
След последната $query е компилирана, трябва да изглежда нещо като:
SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name
Резултатът трябва да съдържа всички DISTINCT редове от всичките 4000 таблици.
Конкретен пример (само във формат 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;
- Първият израз ще получи всички имена на таблици от
information_schemaбаза данни; CONCATфункция поставя пред всяко име на таблица'SELECT * FROM 'низ;GROUP_CONCATвърши работата, коятоimplodeби направил в PHP;-
INTOклауза гарантира, че стойностите се записват в променлива с имеmy_variable; -
PREPAREизразът приема стойност на низ (като тази, която сте записали вmy_variable) и проверява дали стойността е SQL заявка; EXECUTEоператор приема "подготвен израз" и добре... го изпълнява.
@my_variable е временна променлива, но може да бъде само от скаларен тип (varchar, int, date, datetime, binary, float, double и т.н.) тя е не масив.
GROUP_CONCAT е „агрегирана функция“, което означава, че приема агрегирана стойност (подобна концепция на масив – в нашия случай наборът от резултати на нашата заявка) и извежда резултат от обикновен низ.