Tìm kiếm trong cột có các giá trị được phân cách bởi dấu phẩy trong MySQL

Trong MySQL bạn muốn tìm kiếm giá trị trong một Column chứa giá trị được phân cách bởi các dấu phẩy. Ví dụ tạo một câu query lấy da dòng dữ liệu có chứa "sonarika" trong các dòng dữ liệu dạng: "yssyogesh,sonarika,anil,amit" .
Hôm nay tôi muốn đi sâu vào function FIND_IN_SET của MYSQL để giải quyết các vấn đề về tìm kiếm trong 1 tập hợp bằng câu Query mà không cần can thiệp bởi ngôn ngữ khác.




Lưu ý rằng: function find_in_set hoạt động với cả kiểu số và kiểu chuỗi. Và cách hoạt động khác với function in() của MySQL.

1. Data table
Tôi có 1 table department như sau:
iddept_nameuseridusername
1Finance1,2,4,5yssyogesh,sonarika,anil,amit
2IT1,5yssyogesh,amit
3Marketing2,3sonarika,mayank
4Operational2,4,5sonarika,anil,amit
5Sales7,8,9vishal,jiten,shalu
2. Cách sử dụng FIND_IN_SET
Cú pháp:
FIND_IN_SET(search-value, List values)
  • search-value – bạn có thể nhập một chuỗi giá trị, từ khóa cần tìm kiếm.
  • List-values – nó có thể là các giá trị được phân tách bằng dấu phẩy hoặc chỉ là một giá trị. Bạn cũng thể nhập tên Field ở đây.
Function này trả về vị trí của giá trị tìm thấy.
Nếu không tìm thấy function này trả về: 0

3. Ví dụ
# Ex 1:
SELECT FIND_IN_SET('yssyogesh','sonarika,yssyogesh,anil524,admin') as result
Kết quả:
result
2
# Ex 2:
SELECT FIND_IN_SET(5,userid) as result FROM department
Kết quả:
result
4
2
0
3
0

# Ex 3
Sử dụng với WHERE để tìm kiếm giá trị: 1 trong cột userid.
SELECT id,dept_name,userid FROM department WHERE FIND_IN_SET(1,userid)
Kết quả:
iddept_nameuserid
1Finance1,2,4,5
2IT1,5

4. Sự khác nhau giữa FIND_IN_SET và IN

Cả hai functions này đều được sử dụng để tìm kiếm, vậy điểm khác nhau giữa chúng là gì?
FIND_IN_SET
Là function tốt nhất để bạn tìm kiếm 1 giá trị trong 1 column chứa các giá trị được phân tách bởi dấu phẩy (,).
Trả về vị trị của giá trị trong chuỗi. Nếu không tìm thấy thì trả về 0
IN
Được sử dụng khi tìm kiếm giá trị trong một danh sách giá trị. 
Trả về 1 nếu tìm thấy. Nếu không tìm thấy thì trả về 0.

Có vẻ định nghĩa giống nhau nhưng để thấy chi tiết sự khác nhau, các bạn theo dõi 2 ví dụ sau nhé:
# Ex 1 – Sử dụng cả hai để tìm giá trị trong trường có chứa các chữ số được phân tách bằng dấu phẩy.
- Với FIND_IN_SET :
SELECT id,dept_name,userid from department where FIND_IN_SET(2,userid)
Kết quả:
iddept_nameuserid
1Finance1,2,4,5
3Marketing2,3
4Operational2,4,5
- Với IN:
SELECT id,dept_name,userid from department where 2 IN(userid)
Kết quả:
iddept_nameuserid
3Marketing2,3
4Operational2,4,5
Trong ví dụ trên, sử dụng cả hàm FIND_IN_SET IN trong mệnh đề WHERE để tìm giá trị 2 trong cột userid chứa id được phân tách bằng dấu phẩy.
Với FIND_IN_SET:  nó tìm kiếm giá trị 2 trong userid và trả về tất cả các hàng có giá trị tìm kiếm, nhưng với IN: Nó chỉ trả về những hàng mà nó tìm thấy giá trị tìm kiếm ở vị trí đầu tiên. 
# Ex 2 – Sử dụng cả hai để tìm giá trị trong trường có chứa văn bản được phân tách bằng dấu phẩy.
- Với FIND_IN_SET :
SELECT * FROM department where FIND_IN_SET('anil',username)
Kết quả:
iddept_nameuseridusername
1Finance1,2,4,5yssyogesh,sonarika,anil,amit
4Operational2,4,5sonarika,anil,amit
- Với IN:
SELECT * FROM department where 'anil' in(username)
Kết quả: Không trả về bất kỳ giá trị nào.
Như vậy: Hàm FIND_IN_SET thường được sử dụng để tìm kiếm giá trị trong các giá trị được phân tách bằng dấu phẩy trong MySQL. Hàm IN cũng được sử dụng để tìm kiếm nhưng nó không tốt cho các loại tình huống này.





0 Nhận xét:

Đăng nhận xét

Rất mong các ý kiến của các bạn khi đọc bài viết này !