Ví dụ chung (trong PHP):
Việc xây dựng SQL động hoặc xây dựng các truy vấn SQL của bạn với sự hỗ trợ của một ngôn ngữ lập trình sẽ trông như thế này (ví dụ:trong PHP):
$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();
$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);
fetchAll phương thức sẽ trả về một mảng chứa tên của mỗi bảng đã chọn.
implode($glue, $array) hàm nhận một mảng và nối mọi giá trị trong mảng bằng cách sử dụng $glue tham số - thông thường bạn lấy một mảng giá trị và mã hóa chúng bằng cách sử dụng $glue = ',' để tạo danh sách các giá trị được phân tách bằng dấu hôn.
Trong trường hợp của chúng tôi, implode có một phần truy vấn là $glue để tạo một UNION JOIN lớn truy vấn.
Sau khi $query cuối cùng là xây dựng nó sẽ trông giống như sau:
SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name
Kết quả phải chứa tất cả DISTINCT hàng từ tất cả 4000 bảng.
Ví dụ cụ thể (ở định dạng chỉ 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;
- Câu lệnh đầu tiên sẽ lấy tất cả các tên bảng từ
information_schemacơ sở dữ liệu; -
CONCATtiền tố của mỗi tên bảng bằng một'SELECT * FROM 'chuỗi; -
GROUP_CONCATthực hiện công việc màimplodelẽ ra phải làm bằng PHP; -
INTOmệnh đề đảm bảo các giá trị được lưu bên trong một biến có tênmy_variable; -
PREPAREcâu lệnh nhận một giá trị chuỗi (chẳng hạn như giá trị bạn đã lưu trongmy_variable) và kiểm tra xem giá trị có phải là truy vấn SQL hay không; -
EXECUTEcâu lệnh có một "câu lệnh chuẩn bị" và ... thực thi nó.
@my_variable là một biến tạm thời nhưng nó chỉ có thể thuộc loại vô hướng (varchar, int, date, datetime, binary, float, double, v.v.) nó không một mảng.
GROUP_CONCAT hàm là một "hàm tổng hợp" có nghĩa là nó nhận một giá trị tổng hợp (khái niệm tương tự như một mảng - trong trường hợp của chúng tôi là tập kết quả của truy vấn của chúng tôi) và xuất ra một kết quả chuỗi đơn giản.