Sử dụng tìm kiếm Toàn văn MySQL MATCH (col1,col2,...) AGAINST (expr [search_modifier])
điều.
Giả sử bảng của bạn là articles
và bạn cần tìm các bài viết liên quan về tiêu đề của bài đăng hiện tại. Làm như thế này:
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
Điều này sẽ cung cấp cho bạn 5 bài đăng liên quan hàng đầu.
Nhưng trước tiên hãy nhớ bật tìm kiếm Toàn văn cho các cột của bảng đó bằng cách chạy truy vấn sau:
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDIT]:Tại sao không sử dụng LIKE
: Làm rõ với OP:
Vì nó sẽ không cho kết quả chính xác. Giả sử tiêu đề hiện tại của bạn là "Âm nhạc của năm 1980" và bạn muốn có các bài đăng liên quan về tiêu đề đó. Bây giờ, nếu bạn sử dụng LIKE
thì chỉ những bài viết chứa CHÍNH XÁC dãy từ "Music of 1980" mới xuất hiện. Tuy nhiên, nếu bạn sử dụng MATCH ... AGAINST
, khi đó các bài đăng có chứa Nhạc HOẶC 1980 sẽ xuất hiện. Ngoài ra, các bài đăng có cả Nhạc và 1980 sẽ xuất hiện trên Đầu vì nó cho SCORE
cho từng kết quả và chúng tôi sắp xếp theo điểm số đó. Tôi hy vọng điều đó rõ ràng.
[CHỈNH SỬA]:2 :
Nếu bạn có danh mục, bạn có thể thêm AND Category = '$CurrentCategory'
trong câu truy vấn SQL where clause
để nhận được kết quả cụ thể hơn.
[EDIT]:3:OP không thể sử dụng Toàn văn :
Nếu bạn không thể sử dụng Toàn văn (vì lý do nào đó), bạn chỉ có thể hiển thị 5 bài đăng ngẫu nhiên từ cùng một danh mục. Vì chúng thuộc cùng một danh mục, nên ít nhất chúng có liên quan với nhau:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Cú pháp đã chỉnh sửa:Đã thay đổi LIMTI thành LIMIT trong Mã MySQL