Sử dụng mệnh đề LIKE kết hợp SUBSTRING_INDEX để tìm kiếm linh hoạt thứ tự từ.
Tạo bảng demo
mysql> create table DemoTable (
-> ClientName varchar(100)
-> );
Query OK, 0 rows affected (0.85 sec)
Chèn dữ liệu
mysql> insert into DemoTable values('John Smith');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Smith John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Jone Deo');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Deo Jone');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris Brown');
Query OK, 1 row affected (0.15 sec)
Hiển thị dữ liệu
mysql> select * from DemoTable;
Kết quả
+-------------+ | ClientName | +-------------+ | John Smith | | Smith John | | Jone Deo | | Deo Jone | | Chris Brown | +-------------+ 5 rows in set (0.00 sec)
Truy vấn lấy "Jone Deo" hoặc "Deo Jone"
mysql> select * from DemoTable
-> where ClientName
-> LIKE
-> (SELECT SUBSTRING_INDEX("%Jone% %Deo%", " ", -1))
-> or
-> (SELECT SUBSTRING_INDEX("%Deo% %Jone%", " ", 1));
Kết quả
+------------+ | ClientName | +------------+ | Jone Deo | | Deo Jone | +------------+ 2 rows in set (0.00 sec)
Giải thích truy vấn gốc (phức tạp): Sử dụng SUBSTRING_INDEX để tách pattern, nhưng cách này hơi "hard-code" và khó hiểu.
Cách đơn giản, rõ ràng hơn:
SELECT * FROM DemoTable WHERE ClientName LIKE '%Jone%Deo%' OR ClientName LIKE '%Deo%Jone%';
Hoặc dùng REGEXP (MySQL 8.0+):
WHERE ClientName REGEXP 'Jone.*Deo|Deo.*Jone'
Lưu ý: Cách dùng LIKE '%...%...%' không dùng được index, phù hợp cho dữ liệu nhỏ/vừa. Với dữ liệu lớn, cân nhắc Full-Text Search hoặc tách cột first_name, last_name.