Общ пример (в 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
е „агрегирана функция“, което означава, че приема агрегирана стойност (подобна концепция на масив – в нашия случай наборът от резултати на нашата заявка) и извежда резултат от обикновен низ.