Xử lý lỗi tìm kiếm trong MYSQL

Posted on March 22, 2008
by Blog.thegioiwebsite.Net Học thiết kế web với PHP |

Không biết các bạn đã bao giờ gặp phải vấn đề lỗi tìm kiếm trong MYSQL chưa. Vấn đề thế này :

Ví dụ : Trong cơ sở dữ liệu bạn có các chữ : " ống dây cáp,cuộc sống,...".

Khi bạn Search với từ khóa : "ỐNG day cáp" hay cuỘc sỐng thì bạn không nhận được kết quả nào cả.

Qua tìm hiểu mình thấy rằng các phiên bản MYSQL 4.xxx không nhận dạng được một số ký tự unicode chữ hoa hay chữ thường.( Các phiên bản mới hơn thì mình cũng ko biết có bị lỗi vậy ko ).

Để giải quyết vấn đề này mình đã viết ra hai hàm sau mong rằng sẽ có ích cho các bạn

#Function Fillter to Search

function toUpper ($text) {
$lower = array(
'á','à','ả','ã','ạ','â','ấ','ầ','ậ','ẩ','ẫ','ă','ắ','ằ','ặ','ẵ','ẳ','ê','ế','ề','ệ','ể','ễ',
'ô','ố','ồ','ộ','ổ','ỗ','ơ','ớ','ờ','ợ','ỡ','ở','ư','ứ','ừ','ự','ữ','ử','ị','ì','í','ĩ','ỉ',
'ý','ỳ','ỵ','ỷ','ỹ','ù','ú','ụ','ũ','ủ'
);

$upper=array(
'Á','À','Ả','Ã','Ạ','Â','Ấ','Ầ','Ậ','Ẩ','Ẫ','Ă','Ắ','Ằ','Ặ','Ẵ','Ẳ','Ê','Ế','Ề','Ệ','Ể','Ễ',
'Ô','Ố','Ồ','Ộ','Ổ','Ỗ','Ơ','Ớ','Ờ','Ợ','Ỡ','Ở','Ư','Ứ','Ừ','Ự','Ữ','Ử','Ị','Ì','Í','Ĩ','Ỉ',
'Ý','Ỳ','Ỵ','Ỷ','Ỹ','Ù','Ú','Ụ','Ũ','Ủ'
);

$text = str_replace($lower, $upper,$text);
return strToUpper($text);
}

function toLower ($text) {
$lower = array(
'á','à','ả','ã','ạ','â','ấ','ầ','ậ','ẩ','ẫ','ă','ắ','ằ','ặ','ẵ','ẳ','ê','ế','ề','ệ','ể','ễ',
'ô','ố','ồ','ộ','ổ','ỗ','ơ','ớ','ờ','ợ','ỡ','ở','ư','ứ','ừ','ự','ữ','ử','ị','ì','í','ĩ','ỉ',
'ý','ỳ','ỵ','ỷ','ỹ','ù','ú','ụ','ũ','ủ'
);

$upper=array(
'Á','À','Ả','Ã','Ạ','Â','Ấ','Ầ','Ậ','Ẩ','Ẫ','Ă','Ắ','Ằ','Ặ','Ẵ','Ẳ','Ê','Ế','Ề','Ệ','Ể','Ễ',
'Ô','Ố','Ồ','Ộ','Ổ','Ỗ','Ơ','Ớ','Ờ','Ợ','Ỡ','Ở','Ư','Ứ','Ừ','Ự','Ữ','Ử','Ị','Ì','Í','Ĩ','Ỉ',
'Ý','Ỳ','Ỵ','Ỷ','Ỹ','Ù','Ú','Ụ','Ũ','Ủ'
);

$text = str_replace($upper,$lower, $text);
return strToLower($text);
}

Hai hàm ở trên dùng để convert tất cả chữ hoa sang chữ thường hoặc chữ thường sang chữ hoa.

Để giải quyết vấn đề trên mình đã làm như sau:


$key_lower=toLower($_POST["keyword"]);
$key_upper=toUpper($_POST["keyword"]);

khi truy vấn mình chỉ cần so sánh với 2 key trên

$sql="SELECT * FROM tbl_content WHERE content LIKE '%$key_lower%' OR content LIKE '%$key_upper%'";

Với cách này vấn đề của mình đã được giải quyết.Nếu bạn nào có cách hay hơn thì post lên cho mọi người cùng tham khảo nhé


Nguyễn Đức Mạnh



Comments

4 Responses to “Xử lý lỗi tìm kiếm trong MYSQL”

  1. Cuacon on April 7th, 2008 12:24 pm

    cam on ban rat nhieu, toi dang tim cai nay, no rat can cho toi.

  2. Nguyễn Đức Mạnh on April 16th, 2008 12:32 am

    Ko có chi !

  3. Tăng Đức Nam on June 23rd, 2008 2:52 pm

    Chào Bạn mình cũng đang gặp phải vấn đề về tìm kiếm tiếng việt trong mysql. Đọc topic này của bạn mình thấy là bạn đã xử lý được vấn đề tìm kiếm tiếng việt trong mysql còn 2 hàm bạn viết ở trên dùng để xử lý vấn đề không nhận dạng được chữ hoa và chữ thường? Nếu bạn đã xử lý được vấn đề tìm kiếm tiếng việt bạn có thể mail và hướng dẫn cho mình được không.
    Mình đã copy 2 hàm của bạn viết về và chạy thử nhưng nó vấn không tìm thấy.
    Mình cảm ơn bạn rất nhiều!
    Thân!
    Tăng Đức Nam

  4. Nguyễn Đức Mạnh on June 26th, 2008 7:53 pm

    Nếu chữ nào mà search có phân biệt chữ hoa chữ thường thì bạn thêm vào trong các mảng thay thế trên.Ví dụ chữ Đ –> chữ đ, chữ Ô –> ô…Mình đảm bảo là Search sẽ OK. Các chữ mình thống kế ở trên hình như còn thiếu 1 số từ thì phải.

    Chú ý : khi so sánh trong tìm kiếm phải so sánh 3 lần : LIKE %$keyword% OR LIKE %$keyword_lower% OR LIKE %$keyword_upper%

Leave a Reply