Hướng dẫn php union type - kiểu kết hợp php
Nếu bạn cần viết hai câu truy vấn SELECT khác nhau nhưng bạn muốn nó trả về một danh sách kết quả duy nhất thì bạn phải sử dụng toán tử UNION. Toán tử này cũng ít khi sử dụng khi bạn viết ứng dụng Web nhưng cũng nên tìm hiểu vì biết đâu sau này cần.một danh sách kết quả duy nhất thì bạn phải sử dụng toán tử UNION. Toán tử này cũng ít khi sử dụng khi bạn viết ứng dụng Web nhưng cũng nên tìm hiểu vì biết đâu sau này cần. Show
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức. 1. Toán tử UNION trong MySQLToán tử CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');2 cho phép bạn nối kết quả của hai hoặc nhiều câu truy vấn lại với nhau để trở thành một danh sách kết quả duy nhất. Cú pháp của CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');3 như sau: SELECT column1, column2 UNION [DISTINCT | ALL] SELECT column1, column2 UNION [DISTINCT | ALL] … Bài viết này được đăng tại [free tuts .net] Tuy nhiên khi sử dụng UNION trong MySQL chúng ta cần phải tuân thủ những nguyên tắc sau đây:UNION trong MySQL chúng ta cần phải tuân thủ những nguyên tắc sau đây:
Theo mặc định thì CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');2 sẽ loại bỏ các kết quả trùng lặp của các câu CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');4 nên nó tạo cho chúng ta hai lựa chọn sau:
2. Một số ví dụ UNION trong MySQLTrước tiên bạn tạo database, hai tables và thêm một số dữ liệu bằng cách chạy lệnh SQL sau: CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien'); Dữ liệu Table news_1:: Dữ liệu trang news_2:: Ok, bây giờ ta làm một số ví dụ để các bạn hiểu rõ hợn lệnh CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');2 trong SELECT id, title FROM news_1 UNION SELECT id, title FROM news_21 này. Ví dụ 1: Lấy dữ liệu của hai bảng news_1 và news_2 và sau đó gom lại thành một kết quả: Lấy dữ liệu của hai bảng news_1 và news_2 và sau đó gom lại thành một kết quả SELECT id, title FROM news_1 UNION SELECT id, title FROM news_2 Kết quả:: Ví dụ 2: Lấy ID của bảng news_1, news_2 và sau đó gom lại thành một kết quả Lấy ID của bảng news_1, news_2 và sau đó gom lại thành một kết quả SELECT id FROM news_1 UNION SELECT id FROM news_2 Kết quả:: Ví dụ 2: Lấy ID của bảng news_1, news_2 và sau đó gom lại thành một kết quả Rõ ràng CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');2 đã bị xóa đi kết quả trùng vì đáng lẽ ra nó phải hiển thị 10 kết quả nhưng ở đây nó hiển thị có 5 kết quả. SELECT id FROM news_1 UNION ALL SELECT id FROM news_2 Kết quả:: Ví dụ 2: Lấy ID của bảng news_1, news_2 và sau đó gom lại thành một kết quả Rõ ràng CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');2 đã bị xóa đi kết quả trùng vì đáng lẽ ra nó phải hiển thị 10 kết quả nhưng ở đây nó hiển thị có 5 kết quả.Bây giờ ta sử dụng lệnh SELECT id, title FROM news_1 UNION SELECT id, title FROM news_23 để xem thế nào.UNION trong MySQL rất ít sử dụng khi xây dựng ứng dụng website mà thay vào đó sử dụng các lệnh SELECT id, title FROM news_1 UNION SELECT id, title FROM news_25, SELECT id, title FROM news_1 UNION SELECT id, title FROM news_26 và CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');4 nhiều hơn. Bài này cũng tương đối ngắn vì kiến thức đơn giản và dễ hiểu, kể từ bài sau chúng ta tìm hiểu về lệnh SELECT id, title FROM news_1 UNION SELECT id, title FROM news_28, đây là một lệnh khá khó đối với những bạn mới học SELECT id, title FROM news_1 UNION SELECT id, title FROM news_21. Với lệnh SELECT id, title FROM news_1 UNION SELECT id, title FROM news_23 thì dù bị trùng lặp nhưng nó vẫn trả về kết quả.3. Lời kếtUNION và UNION ALL được dùng để gộp tập kết quả của hai hay nhiều câu lệnh truy vấn dữ liệu (SELECT) lại với nhau. Toán tử UNION trong MySQL rất ít sử dụng khi xây dựng ứng dụng website mà thay vào đó sử dụng các lệnh SELECT id, title FROM news_1 UNION SELECT id, title FROM news_25, SELECT id, title FROM news_1 UNION SELECT id, title FROM news_26 và CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');4 nhiều hơn. Bài này cũng tương đối ngắn vì kiến thức đơn giản và dễ hiểu, kể từ bài sau chúng ta tìm hiểu về lệnh SELECT id, title FROM news_1 UNION SELECT id, title FROM news_28, đây là một lệnh khá khó đối với những bạn mới học SELECT id, title FROM news_1 UNION SELECT id, title FROM news_21.
- Trong đó:Toán tử UNION chỉ lấy mỗi loại giá trị một lần duy nhất (tức là không có trường hợp các giá trị trùng nhau)
Các câu lệnh SELECT phải có chung số lượng cột.
Thứ tự cột trong các câu lệnh SELECT phải được sắp xếp theo đúng thứ tự cột của cái bảng kết hợp.
Các cột tương ứng giữa các câu lệnh SELECT phải có kiểu dữ liệu giống nhau.- Dưới đây là cú pháp sử dụng toán tử UNION:
Nguyễn Thành Nhân Nam
Cần Thơ
Nguyễn Thành Nhân Nam Cần Thơ
Cần Thơ
Nguyễn Thành Nhân Nam
- Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như bên dưới:
Trương Khắc Tâm Trà Vinh CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');0 - Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như bên dưới:
Hậu Giang Nguyễn Thành Nhân CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');1 - Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như bên dưới:
|