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

Tạo một bài đăng có liên quan hoặc tương tự bằng PHP &MySQL

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



  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 để tạo một câu lệnh chuẩn bị sẵn mysql an toàn trong php?

  2. Chỉ nhận các chữ số bằng regexp

  3. Làm thế nào để thay đổi tên bảng MySQL trong máy chủ Linux để không phân biệt chữ hoa chữ thường?

  4. Tại sao MySQL trả về cùng một kết quả trong khi sử dụng RAND () trong câu lệnh SELECT?

  5. Lỗi-Cố gắng bằng phương pháp 'X.set_DbConnection (System.Data.Common.DbConnection)' để truy cập phương thức 'Y.get_Settings ()' không thành công