Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 16
  1. #1
    Tham gia
    24-01-2008
    Bài viết
    2
    Like
    0
    Thanked 0 Times in 0 Posts

    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
    Quote Quote

  2. #2
    Tham gia
    07-07-2007
    Bài viết
    120
    Like
    0
    Thanked 0 Times in 0 Posts
    Cái phần cả đoạn thì mình biết làm còn 2 cái kia thì chịu.. mới nghĩ loáng thoáng trong đầu đã chóng mặt rồi ... nghĩ sâu nữa chắc điên
    Loại cả đoạn thì chỉ cần chạy query sau:
    Code:
    SELECT * FROM `post` WHERE content = "%$keyword%"
    Với `post` là tên table của bạn, content là field chứa nội dung bài viết và $keyword là từ khóa tìm kiếm mà người dùng ghi vào ( trước đó cần đặt $keyword = $_GET['keyword']; để gán dữ liệu nhập vào từ form search cho biến $keyword. )
    Code đơn giản thế này:
    Cho đoạn code này nằm trong file search.php
    Code:
    <?php
    $keyword = $_GET['keyword']
    $searchquery = mysql_query("SELECT * FROM post WHERE content = \"%$keyword%\"") or die (mysql_error());
    $count_result = mysql_num_rows($search_query);
    if ($count_result == 0)
    {
    echo "Không tìm thấy <B>".$keyword."</B> trong tài liệu nào.";
    }
    else
    {
    echo "Bạn đang tìm <B>".$keyword."</B> và có <B>".$count_result."</B> kết quả được tìm thấy.";
    while ($row = mysql_fetch_array($searchquery))
    {
    echo "<a href=\"index.php?act=viewpost&id=".$row['id']."\">".$row['title']."</a>";
    }
    }
    ?>
    Đại loại là như thế có thể thêm thắt gì đấy tùy ý
    Code hơi "cùi", có gì sai đừng trách tui nghe đang học PHP thôi ...

  3. #3
    Tham gia
    04-06-2006
    Bài viết
    1,395
    Like
    0
    Thanked 0 Times in 0 Posts
    Ùm dùng fulltext hay nhất, kết quả trả về toàn diện hơn. Tuy nhiên việc dùn chức năng nầy ngốn nhiều tài nguyên máy ( khoảng 100K dòng là dể bị overload server lắm). Nên cân nhắc trước khi dùng.
    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ả.

  4. #4
    Tham gia
    05-04-2005
    Bài viết
    581
    Like
    1
    Thanked 1 Time in 1 Post
    tôi mới xem lại manual, fulltext không thể tìm đúng cụm từ "Hôm nay" được, nó chỉ có khả năng tìm từng từ 1 thôi. Nếu muốn làm kiểu google mà yêu cầu php + mysql thì hơi mệt.

    Nếu bỏ qua yêu cầu php, bạn có thể nghĩ đến lucene

  5. #5
    Tham gia
    07-07-2007
    Bài viết
    120
    Like
    0
    Thanked 0 Times in 0 Posts
    Ôi dào ! Xài google cho tiện làm search riêng chi cho mệt phải lọc nội dung, rồi check hết nội dung , blah blah blah , ... chưa kể phải loại bỏ mấy cái tag HTML để tìm kiếm chính xác nữa... sơ sơ thấy code dài dài ==> nhức đầu!
    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...

  6. #6
    Tham gia
    05-04-2005
    Bài viết
    581
    Like
    1
    Thanked 1 Time in 1 Post
    zend framework có bộ zend search lucene. Nếu dùng nó để index thì có thể search giống google

  7. #7
    Tham gia
    24-01-2008
    Bài viết
    2
    Like
    0
    Thanked 0 Times in 0 Posts
    Thưa bác gấu lucky em đang muốn làm cho việc tìm kiếm trong cơ sở dữ liệu của mình chứ không phải google. Chỉ cần làm đại loại như thế.
    Đố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

  8. #8
    Tham gia
    02-02-2004
    Bài viết
    309
    Like
    2
    Thanked 6 Times in 6 Posts
    Tôi nghĩ bạn có thể giải quyết như sau:
    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
    PHP Code:
    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, ...' 

  9. #9
    Tham gia
    07-07-2007
    Bài viết
    120
    Like
    0
    Thanked 0 Times in 0 Posts
    Ô hô hay nhỉ code là lạ... :P nếu vậy phì phải nhận dạng keyword... chắc dùng str_replace() sửa dấu " thành % rồi nhét vào query...

  10. #10
    Tham gia
    22-01-2008
    Bài viết
    37
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi newone668 View Post
    1. cả đoạn
    ... thì dễ rồi, bạn kia đã có chỉ
    2. từng từ
    dùng explode để tách ra:

    $array = explode(" ", $searchString);

    dùm implode để ghép thành sql-query:

    $query = "colname='".implode("' OR colname='", $array)."'";
    $query = "select ... from ... where ".$query;

    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
    cái này rắc rối hơn 1 chút, dùng RegEx lấy phần trong ngoặc kép:

    $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

Trang 1 / 2 12 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •