Tìm kiếm chuỗi con mysql

Đôi lúc có một vấn đề gì đó mà cơ sở dữ liệu của bạn cần phải được thay thế toàn bộ một từ, cụm từ, … chuỗi – chuỗi bằng một chuỗi khác. Ví dụ blog này của mình được cài đặt ở localhost, địa chỉ blog lúc ở localhost là http. //trieu/, sau đó chuyển tất cả các bài viết ở blog cũ sang, và như thế toàn bộ đường dẫn đến ảnh trên blog đều là http. //trieu/wp-content/uploads/…jpg. Và như vậy sẽ không thể xem hình nổi trong bất kỳ bài nào khi đưa nó lên mạng. Và giải pháp ở đây chính là thay thế toàn bộ chuỗi “http. //trieu/” bằng chuỗi “http. //tientrieu. net/". Tuy nhiên, phpMyAdmin, công cụ thường được sử dụng nhiều nhất để biên tập lại MySQL file, không có tìm kiếm và thay thế, chỉ có tìm kiếm thôi

Vấn đề rất đơn giản, sử dụng hàm thay thế trong MySQL sẽ giải quyết được, trong phpMyAdmin, bạn chọn chức năng Truy vấn MySQL để thực hiện chạy câu lệnh MySQL của bạn

Và viết một câu lệnh với cấu trúc sau.
CẬP NHẬT tên bảng SET tablefield = replace(tablefield,”findstring”,”replacestring”);

Giải thích . Câu lệnh trên mang nghĩa cập nhật nội dung của trường bảng trong bảng tên bảng với nội dung mới là nội dung cũ đã được thay thế toàn bộ các từ  chuỗi tìm kiếm bằng từ chuỗi thay thế.

Ví dụ. Trong trường hợp xử lý bài viết trong blog wordpress này sẽ là.

CẬP NHẬT wp_posts SET post_content = replace(post_content,”http. //trieu/”,”http. //tientrieu. net/");

Trong ví dụ trên

Tên bảng là wp_posts, tên trường cần cập nhật nội dung bên trong là post_content, nội dung cần tìm kiếm là http. //trieu/, nội dung cần thay thế là http. //tientrieu. net/

Just a little function which mimics the original mysql_real_escape_string but which doesn't need an active mysql connection. Could be implemented as a static function in a database class. Hope it helps someone.

function mysql_escape_mimic($inp) {
    if(is_array($inp))
        return array_map(__METHOD__, $inp);

    if(!empty($inp) && is_string($inp)) {
        return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);
    }

    return $inp;
}
?>

Trong bài viết này, tôi sẽ đề cập đến vấn đề hướng dẫn tìm kiếm có dấu trên MySQL bằng cách sử dụng CONVERT(value, BINARY). Do đó search có dấu trên MySQL có gì để tìm hiểu trong bài viết này thì hay xem vấn đề tôi đặt ra ở bên dưới

Vấn đề

Khi tôi làm dự án cho khách hàng, và đương nhiên trang web nào cũng có chức năng cần thiết để tìm kiếm. Với một số trang web như tin tức, thương mại điện tử đôi khi chúng ta không đề cập đến việc tìm kiếm kết quả phải chính xác và cụ thể nhất. Ví dụ. User into trang blog itphutran. com và tìm kiếm với từ khóa “học java” thì kết quả tìm kiếm được hiển thị như sau

Tìm kiếm chuỗi con mysql

Như vậy khi tìm kiếm bên ngoài kết quả tìm kiếm với cụm từ “học java” thì nếu trong bài viết của tôi có những cụm từ như “hoc” ,”hóc”,…vv Tóm lại là có từ hoc thì nó sẽ được tìm kiếm . Đơn giản vì chúng ta thường sử dụng câu lệnh SQL như sau

CHỌN * TỪ bảng WHERE cột LIKE ‘%học java%’

Do đó, công việc tìm kiếm sẽ thu được kết quả tương tự chứ không phải chính xác bắt buộc phải có cụm từ “học java”

Nhưng với một số trang web như quản lý tín hiệu duy nhất của một trường đại học, hay quản lý danh sách sinh viên giả tạo thì sẽ tìm kiếm một cách chính xác sinh viên đó chứ không nên tìm kiếm những sinh viên liên quan để nâng cao hiệu quả

Một ví dụ như sau

 

Tìm kiếm chuỗi con mysql

 

Tôi có bảng listv với 2 cột sv_id và tên. Trong trường hợp này, tôi muốn tìm kiếm những sinh viên có tên “Anh”

Cách tìm kiếm thông thường khi không sử dụng  CONVERT(value, BINARY)

CHỌN * TỪ lissv trong đó tên THÍCH “%Anh”

Như vậy kết quả tìm kiếm.  

 

Tìm kiếm chuỗi con mysql

 

Qua đó, chúng tôi thấy rằng những thí sinh có tên như Ánh, Cảnh vì có từ “Anh” nên kết quả cũng được search và hiển thị. Nhưng trường hợp này chúng ta không mong kết quả như trên, chính xác phải là sinh viên có tên “Nguyễn Anh”. Vì vậy, lúc này các bạn sẽ sử dụng cách để chuyển từ chuỗi sang chuỗi nhị phân, mục đích chuyển từ chuỗi sang hệ nhị phân

Ví dụ. Từ Anh chuyển sang hệ nhị phân có dạng như sau

Anh => 01000001 01101110 01101000

Cảnh => 01000011 1111010100011 01101110 01101000

Qua đó khi chuyển về định dạng nhị phân thì công việc tìm kiếm sẽ chính xác

Tìm kiếm khi sử dụng  CONVERT(value, BINARY)

Vì vậy câu lệnh khi chuyển đổi từ chuỗi sang BINARY trong MySQL là

CHUYỂN ĐỔI ('chuỗi', BINARY))

Tương ứng câu hỏi truy vấn tìm kiếm với ví dụ trên

CHỌN * TỪ lissv trong đó tên LIKE CONCAT(‘%’, CONVERT(‘Anh’, BINARY))

Trong đó các bạn lưu ý chúng ta sử dụng hàm CONCAT để nối chuỗi trong MySQL

Kết quả.  

Tìm kiếm chuỗi con mysql

Qua đó , kết quả như mong đợi

#Tổng kết

Một số trường hợp tìm kiếm chúng ta không cần sử dụng cách chuyển đổi từ chuỗi sang BINARY sử dụng CONVERT(value, BINARY) nhưng nếu muốn tìm kiếm một cách chính xác thì bài hướng dẫn trên là một ví dụ cụ thể