Anda dapat mulai menggunakan SOUNDEX()
, ini mungkin akan melakukan apa yang Anda butuhkan (saya membayangkan kotak saran otomatis dari alternatif yang sudah ada untuk apa yang diketik pengguna).
Kekurangan SOUNDEX()
adalah:
- ketidakmampuannya untuk membedakan string yang lebih panjang. Hanya beberapa karakter pertama yang diperhitungkan, string yang lebih panjang yang menyimpang di akhir menghasilkan nilai SOUNDEX yang sama
- faktanya huruf pertama harus sama atau kamu tidak akan menemukan kecocokan dengan mudah. SQL Server memiliki fungsi DIFFERENCE() untuk memberi tahu Anda berapa banyak dua nilai SOUNDEX yang terpisah, tapi menurut saya MySQL tidak memiliki bawaan semacam itu.
- untuk MySQL, setidaknya menurut dokumen , SOUNDEX rusak untuk input unicode
Contoh:
SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')
/* all of these return 'M262' */
Untuk kebutuhan lebih lanjut, saya rasa Anda perlu melihat Jarak Levenshtein (juga disebut "edit jarak") dari dua string dan bekerja dengan ambang batas. Ini adalah solusi yang lebih kompleks (=lebih lambat), tetapi memungkinkan fleksibilitas yang lebih besar.
Kelemahan utama adalah, Anda memerlukan kedua string untuk menghitung jarak di antara keduanya. Dengan SOUNDEX Anda dapat menyimpan SOUNDEX yang telah dihitung sebelumnya di tabel Anda dan membandingkan/mengurutkan/mengelompokkan/menyaringnya. Dengan jarak Levenshtein, Anda mungkin menemukan bahwa perbedaan antara "Microsoft" dan "Nzcrosoft" hanya 2, tetapi akan membutuhkan lebih banyak waktu untuk mencapai hasil itu.
Bagaimanapun, contoh fungsi jarak Levenshtein untuk MySQL dapat ditemukan di codejanitor.com:Jarak Levenshtein sebagai Fungsi Tersimpan MySQL (10 Februari 2007) .