Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để kết hợp mờ tên công ty trong MYSQL với PHP để tự động hoàn thành?

Bạn có thể bắt đầu bằng cách sử dụng SOUNDEX() , điều này có thể sẽ làm được những gì bạn cần (tôi hình dung một hộp gợi ý tự động gồm các lựa chọn thay thế đã có sẵn cho những gì người dùng đang nhập).

Hạn chế của SOUNDEX() là:

  • không có khả năng phân biệt các chuỗi dài hơn. Chỉ một số ký tự đầu tiên được tính đến, các chuỗi dài hơn phân kỳ ở cuối sẽ tạo ra cùng một giá trị SOUNDEX
  • thực tế là chữ cái đầu tiên phải giống nhau, nếu không bạn sẽ không dễ dàng tìm thấy sự trùng khớp. SQL Server có hàm DIFFERENCE () để cho bạn biết hai giá trị SOUNDEX cách nhau bao nhiêu, nhưng tôi nghĩ MySQL không có gì thuộc loại đó được tích hợp sẵn.
  • đối với MySQL, ít nhất là theo the tài liệu , SOUNDEX bị hỏng đối với đầu vào unicode

Ví dụ:

SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')

/* all of these return 'M262' */

Đối với các nhu cầu nâng cao hơn, tôi nghĩ bạn cần xem xét khoảng cách Levenshtein (còn được gọi là "chỉnh sửa khoảng cách") của hai chuỗi và hoạt động với một ngưỡng. Đây là giải pháp phức tạp hơn (=chậm hơn), nhưng nó cho phép linh hoạt hơn.

Hạn chế chính là, bạn cần cả hai chuỗi để tính toán khoảng cách giữa chúng. Với SOUNDEX, bạn có thể lưu trữ SOUNDEX được tính toán trước trong bảng của mình và so sánh / sắp xếp / nhóm / bộ lọc trên đó. Với khoảng cách Levenshtein, bạn có thể thấy rằng sự khác biệt giữa "Microsoft" và "Nzcrosoft" chỉ là 2, nhưng sẽ mất nhiều thời gian hơn để đi đến kết quả đó.

Trong mọi trường hợp, bạn có thể tìm thấy một hàm khoảng cách Levenshtein ví dụ cho MySQL tại codejanitor.com:Khoảng cách Levenshtein dưới dạng một hàm được lưu trữ trong MySQL (ngày 10 tháng 2 năm 2007) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo người dùng mới trong MySQL và cấp cho nó toàn quyền truy cập vào một cơ sở dữ liệu

  2. Giới thiệu về chuyển đổi dự phòng cho MySQL Replication - Blog 101

  3. Cách tốt nhất để kiểm tra xem mysql_query có trả lại kết quả nào không?

  4. MySQL chọn với điều kiện CONCAT

  5. MySQL - chọn dữ liệu từ cơ sở dữ liệu giữa hai ngày