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]').