我正在查找哪些电话号码的交换服务,从一张显示哪些交换服务的零碎数字表。 所以我的表包含,例如:
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 |
(抱歉,格式化一点垃圾)
leadin是我必须匹配的电话号码的主要部分(存储为VARCHAR,而不是数字)
我提供的电话号码是1924283777(不是真实的) 我如何查询以获得上表中的最佳匹配(它应该选择交换ID 9949),或者在我完成查询后在代码中处理它(php)
tl; dr:leadin列值的可变长度,希望与比leadin更长的数字匹配。
答案 0 :(得分:2)
我会想像
WHERE ? LIKE concat(leadin, '%') order by length(leadin) desc limit 1
(我没有检查过函数名称,我不确定这在MYSQL中是否可行 - 我很确定它可以在我使用过的SQL中运行)。