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_schema
cơ sở dữ liệu; -
CONCAT
tiền tố của mỗi tên bảng bằng một'SELECT * FROM '
chuỗi; -
GROUP_CONCAT
thực hiện công việc màimplode
lẽ ra phải làm bằng PHP; -
INTO
mệnh đề đảm bảo các giá trị được lưu bên trong một biến có tênmy_variable
; -
PREPARE
câ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; -
EXECUTE
câ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.