10/10/2018, 10:44
Tìm kiếm dữ liệu trong php và Mysql
Tớ có vấn đề này muốn hỏi các bạn?
Tớ có muộn đoạn văn "Hôm nay là ngày 20 tháng 10 năm 2007, ..."
Giờ tớ muốn tìm kiếm đoạn văn này với thứ tự ưu tiên như sau:
1. cả đoạn
2. từng từ
3. cụm từ do người sử dụng áp đặt ( ví dụ "Hôm nay" là ngày 20 tháng 10 năm 2007, ..) nghĩa là trong đoạn văn của một trường nào phải có nguyên 1 cụm từ Hôm nay và các từ kia có thể nằm đâu đó trong đoạn văn. Dạng như google vậy
Bác nào biết chỉ tớ nhá
Thanks
Tớ có muộn đoạn văn "Hôm nay là ngày 20 tháng 10 năm 2007, ..."
Giờ tớ muốn tìm kiếm đoạn văn này với thứ tự ưu tiên như sau:
1. cả đoạn
2. từng từ
3. cụm từ do người sử dụng áp đặt ( ví dụ "Hôm nay" là ngày 20 tháng 10 năm 2007, ..) nghĩa là trong đoạn văn của một trường nào phải có nguyên 1 cụm từ Hôm nay và các từ kia có thể nằm đâu đó trong đoạn văn. Dạng như google vậy
Bác nào biết chỉ tớ nhá
Thanks
Bài liên quan
Loại cả đoạn thì chỉ cần chạy query sau:
Code đơn giản thế này:
Cho đoạn code này nằm trong file search.php
Code hơi "cùi", có gì sai đừng trách tui nghe đang học PHP thôi ...
Hiện nay trên mạng cũng có nhiều script giúp index site bác thành cơ sở dữ liệu để phục vụ cho việc search. Tuy nhiên để sử dụng hiệu quả đòi hỏi bác phải hiểu hiểu rõ script của site bác để nhứng vào cho nhiều quả.
Nếu bỏ qua yêu cầu php, bạn có thể nghĩ đến lucene
Còn nếu bạn siêng muốn tự viết thì gợi ý vài hàm để dùng trong tìm kiếm:
strip_tags : loại bỏ tag HTML
substr : ngắt bớt nội dung (VD: đoạn văn của bạn 100 dòng, nội dung tìm kiếm nằm ở khoảng dòng thứ 50, thì với substr nó sẽ giúp hiển thị các dòng từ 48->52 trong đoạn văn thôi, giống như google đó )
... còn nhiều hàm nữa bạn tự khám phá đi. thực ra trong quá trình làm chắc chắn gặp nhiều rắc rối , tự khắc sẽ tìm kiếm cách giải quyết, thế là mấy cái hàm được "moi" ra...
Đối với việc tìm kiếm dạng LIKE %query% thì ngon rồi các bác ạ. Chỉ giờ làm thế nào để nó nhận dạng một cụm từ trong "abcd" thôi. Dùng fulltextsearch tuy hay nhưng là dở lắm. Máy chủ còi chơi cái anh này nó gặm ngất luôn.
Các bác có thuật toán nào chỉ cho em với. Thx
Tách chuỗi "hôm nay" ra khỏi chuỗi từ khóa
Thêm vào câu lệnh select như sau
SELECT * FROM table WHERE content LIKE '%hôm nay%' AND content LIKE 'Hôm nay là ngày 20 tháng 10 năm 2007, ...'
$array = explode(" ", $searchString);
dùm implode để ghép thành sql-query:
$query = "colname='".implode("' OR colname='", $array)."'";
$query = "select ... from ... where ".$query;
$pattern = '&"(.*)"&isU';
$result = preg_match_all($pattern, $searchString, $subpattern);
kế đó dùng str_replace để xoá hết mấy phần trong ngoặc kép của $searchString rồi làm như phần 2. sau đó ghép kếp quả tìm được trong RegEx thêm vô là xong
Mến.
À quên, khi xài RegEx thì kiếm delimiter nào mà không có trong text nhe