2014-04-03 55 views
0

我試圖創建一個mysql查詢,它將從數據庫中選擇soundex等價的姓氏。 在php中,我生成了soundex代碼:不同的soundex值php和mysql

$ sxname = soundex($ name);

,然後我建了MySQL查詢

$query = "SELECT * 
FROM database 
WHERE soundex(surname) 
LIKE '$sxname'" 
; 

也能正常工作了很多姓氏,但不是爲別人 - 比如CAWS。 CAWS的php soundex值是C200,但mysql值是C000。

有沒有解決這些差異的方法?

我曾嘗試使用,因此兩者都在PHP創建了一個功能:

function mysql_soundex($name) 
{ 
    $snname = soundex($name); 
    return $snname; 
} 

,並調用它:

$query = "SELECT * 
FROM database 
WHERE mysql_soundex('surname') 
LIKE '$sxname'" 
; 

但是,這也不能工作。

+0

你的第二個方法永遠不會工作。你不能從PHP聲明函數來使用MySQL。 – RandomSeed

回答

1

讓MySQL只做的同音轉換:

$query = 
     "SELECT * FROM database 
     WHERE SOUNDEX(surname) = SOUNDEX('$name')"; 

...或完全等同的語法糖:

$query = 
     "SELECT * FROM database 
     WHERE surname SOUNDS LIKE '$name'"; 
+0

謝謝 - 我認爲這會很直接,我只是看不到它。 – user3495662

+0

我現在發現的一個問題是,mysql soundex比php soundex鬆了很多,並且與標準soundex編碼不匹配 - 所以我已經添加了另一個字段到數據庫以保存每個姓氏的php soundex代碼。 – user3495662