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

truy vấn mysql để so khớp câu với từ khóa trong một trường

Một cách để thực hiện có thể là chuyển đổi apple, oranges, pears thành apple|oranges|pears và sử dụng RLIKE (tức là biểu thức chính quy) để đối sánh với nó.

Ví dụ:'John thích ăn táo' đối sánh với regex 'apple | orange | pears'.

Đầu tiên, để chuyển đổi 'apple, Orange, pears' sang dạng regex, hãy thay thế all ',' bằng '|' sử dụng REPLACE . Sau đó, sử dụng RLIKE để chọn các mục từ khóa phù hợp:

SELECT * 
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');

Tuy nhiên, điều này phụ thuộc vào việc phân tách bằng dấu phẩy của bạn có nhất quán không (tức là nếu có một hàng trông giống như apples,oranges điều này sẽ không hoạt động như REPLACE thay thế dấu phẩy theo sau bằng dấu cách (theo các hàng mẫu của bạn).

Tôi cũng không nghĩ rằng nó sẽ mở rộng quy mô rất tốt.

Và, nếu bạn có một câu như 'John thích ăn dứa', nó sẽ khớp với cả hai hàng ở trên (vì nó có 'apple' trong đó). Sau đó, bạn có thể thử thêm các ranh giới từ vào regex (tức là WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ), nhưng điều này sẽ làm khó đối sánh khi bạn có số nhiều ('táo' sẽ không khớp với '[wordboundary] apple [wordboundary]').



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thêm dấu ngày và giờ vào INSERT qua PHP với mySQL?

  2. Làm cách nào để chỉ chọn dữ liệu số từ mysql?

  3. Trích xuất Ngày / Tháng / Năm từ Dấu thời gian trên MYSQL

  4. Cách quản lý các phiên trong Node.js bằng Passport, Redis và MySQL

  5. Độ dốc MySQL (xu hướng) của trường đơn (dòng phù hợp nhất)