2011-07-16 39 views
11

Tôi chưa bao giờ thực sự nghe một câu trả lời thẳng vào thế này, tôi chỉ cần toàn văn tìm kiếm một vài cột với nhiều chữ "FirstName LastName"mysql tìm kiếm toàn văn nhiều từ

$sql = mysql_query("SELECT * FROM 
        patient_db 
        WHERE MATCH (Name, id_number) 
        AGAINST ('% $term %' IN BOOLEAN MODE);"); 

Nhưng nó không chạy truy vấn nếu tôi nhập nhiều hơn một từ ở đây.

Trả lời

16
$sql = mysql_query("SELECT * FROM 
     patient_db WHERE 
     MATCH (Name, id_number) 
     AGAINST ('+first_word +second_word +third_word' IN BOOLEAN MODE);"); 

và nếu bạn muốn tìm kiếm chính xác:

$sql = mysql_query("SELECT * 
        FROM patient_db 
        WHERE MATCH (Name, id_number) 
        AGAINST ('"exact phrase"' IN BOOLEAN MODE);"); 
+1

Ai đó có thể khai sáng cho tôi nếu có giới hạn về số lượng từ bạn có thể tìm kiếm trong 1 MATCH AGAINST truy vấn? Trong ví dụ của câu trả lời này, bạn có từ thứ ba mà cũng làm việc trong truy vấn của riêng tôi nhưng khi tôi đặt + fourth_word và thậm chí nếu nó tồn tại trong các cột, nó trả về kết quả rỗng. – vincent

+1

"cụm từ chính xác" không có nghĩa là cụm từ chính xác mà không có bất kỳ dấu (+/-) nó sẽ được coi là một OR. không có cụm từ chính xác trong tìm kiếm văn bản đầy đủ, chỉ có tất cả các từ, một số từ, không có từ nào. – Gamesh

+1

Điều này được thay đổi trong khoảng thời gian 5 năm – Vineet1982

4
SELECT * 
FROM patient_db 
WHERE MATCH (Name, id_number) 
     AGAINST ("Firstname Lastname" IN BOOLEAN MODE); 

Dấu ngoặc kép là quan trọng. Điều này có nghĩa là cụm từ "Firstname Lastname". Bạn không cần dấu phần trăm.

Nếu bạn tìm kiếm "FirstName LastName blahblahblah blahblah", mệnh đề AGAINST() phải trông như thế này:

AGAINST ('+Firstname +Lastname' IN BOOLEAN MODE); 

Có nhìn vào MySQL docs on full text search để biết thêm.

Một điều khác: tại sao bạn có cột id_number trong trận đấu của mình?

+0

Hi xin lỗi tôi đăng rằng trước khi tôi đi ngủ đêm qua. Điều này vẫn không hiệu quả đối với tôi, tôi chỉ có một trường tìm kiếm được gọi là $ term và cả hai họ và tên đều nằm trong cùng cột mySQL – iamwhitebox

Các vấn đề liên quan