2010-10-14 7 views
1

Je cherche quels services d'échange quels numéros de téléphone, à partir d'un tableau de nombres fragmentaires qui montrent quel échange les services. Donc ma table contient, par exemple:numéros de match de chaîne SQL, longueur variable

id  |exchcode |exchname  |easting|northin|leadin  | 
----------------------------------------------------------------- 
12122 |SNL/UC  |SANDAL  |43430 |41306 |1924240 | 
12123 |SNL/UC  |SANDAL  |43430 |41306 |1924241 | 
881  |SNL/UD  |SANDAL  |43430 |41306 |1924249 | 
2456 |BD/BCC/1 |BRADFORD CABLE |41627 |43262 |192421  | 
4313 |NEY/UB  |NORMANTON  |43847 |42289 |192422  | 
12124 |SNL/UC  |SANDAL   |43430 |41306 |192425  | 
9949 |OBE/UB  |HORBURY OSSETT |42857 |41971 |192428  | 
9987 |OBE/UB  |WAKEFIELD  |42857 |41971 |1924  | 

(désolé, le formatage d'un peu ordures)

leadin est la partie principale du numéro de téléphone que je dois correspondre (stocké en tant que VARCHAR, non un certain nombre)

et je suis livré avec un numéro de téléphone 1924283777 (pas vrai) comment faire une requête pour obtenir le meilleur match de la table ci-dessus (Il faut choisir l'échange id 9949), ou dois-je traite dans le code après que je l'ai fait la requête (php)

tl; dr: longueur variable pour les valeurs de la colonne leadin, qui correspond le mieux à un nombre plus long que leadin.

Répondre

2

Je pense quelque chose comme

WHERE ? LIKE concat(leadin, '%') order by length(leadin) desc limit 1 

(je ne l'ai pas vérifié les noms de fonctions, et je ne suis pas certain que cela va fonctionner dans MYSQL - Je suis sûr qu'il va travailler dans l'un des le SQL que j'ai utilisé).

+0

Blimey c'est intelligent - jamais pensé à inverser où être où , et concat avec% est brillant. Très rapide, semble tache sur. Je vous remercie. –

Questions connexes