2013-01-23 83 views
3

我目前正在使用Mysql和PHP。SQL查詢在字符串開頭的最接近匹配

尋找一個查詢,將採取一個數字,並找到一組數字開始的壁櫥匹配,例如我有號碼019235678910, 026725678910, 026825678910和我的表看起來像這樣。

Table - Destintation 

Name  Number 
Watford 01923 
Oxford 026 
Romford 026 
Crawford 0267 
Topford 02672 

所以,當我通過019235678910結果將是Watford026725678910Topford026825678910OxfordRomford

我也不確定MYSQL是否可以直接執行此操作,還是需要與PHP一起使用?

+0

看到這個問題。我認爲這是相同的問題:** [儘可能在MySQL中走BTREE索引](http://dba.stackexchange.com/questions/29849/walking-a-btree-index-as-far-as-possible -in-mysql)** –

+0

可能重複[MySQL select匹配字符串的最大長度](http://stackoverflow.com/questions/13687168/mysql-select-maximum-length-of-matching-string) –

回答

0
SELECT Name, Number 
FROM Destintation 
WHERE LEFT('026725678910', LENGTH(Number)) = Number 

或許

WHERE '026725678910' LIKE CONCAT(Number, '%') 
+0

謝謝爲了回答這個問題,但是這種方法並不完全如我所希望的那樣,因爲號碼是026725678910,而不是隻是返回Topford作爲壁櫥比賽,它也返回牛津,羅姆福德和克勞福德。乾杯 – mflammia

2

這裏讓所有的人的一種方式:

select d.* 
from Destination d join 
    (select length(Number) as maxlen, number 
     from destination d 
     where YOURVALUE like concat(Number, '%') 
     order by maxlen desc 
     limit 1 
    ) dsum 
    on d.Number = dsum.Number 

因爲你正在尋找初始序列,只有一個上的數字最大匹配(因此limit 1工程)。

順便說一下,名爲number的字段顯然是一個字符字段。就個人而言,我認爲調用一個字符字段「數字」是個不好的習慣 - 稱爲認知失調。

+0

這很好,謝謝,建議也積極注意。 – mflammia