我有一个数据库,列出了一些区号、区号+办公室代码以及一些整数和一个操作。我希望它返回给定数字的结果,但我不确定如何完成。我有一些MySQL知识,但不是很深入。
这里有一个例子:
match | action
_____________________
234 | goto 1
333743 | goto 2
8005551212| goto 3
234843 | goto 4
我需要用一个完整的10位数字查询数据库
query 8005551212 gives "goto 3"
query 2345551212 gives "goto 1"
query 3337431212 gives "goto 2"
query 2348431212 gives "goto 4"
这将类似于LIKE
选择,但我需要与数据库值而不是查询值匹配。匹配完整号码很容易,
SELECT * FROM database WHERE `match` = 8005551212;
首先,要查询的数字总是10位,所以我不知道如何格式化SELECT语句来区分234XXXXXXX
和234843XXXX
的匹配,因为我只能返回一个匹配。基本上,如果它与10位数字不匹配,那么它会检查6位数字,然后它会检查3位数字。
我希望这是有意义的,我没有任何其他方法来格式化数字,而且它必须通过Asterisk中的ODCB连接通过一个SQL查询和返回来完成。
试试这个
SELECT match, action FROM mytable WHERE '8005551212' like concat(match,'%')
问题是,你会在一个案例中得到两行。。根据您的数据。。
SELECT action
FROM mytable
WHERE '8005551212' like concat(match,'%')
order by length(match) desc limit 1
这应该得到匹配数字最多的行。。
试试这个:
SELECT * FROM (
SELECT 3 AS score,r.* FROM mytable r WHERE match LIKE CONCAT(SUBSTRING('1234567890',1,3),'%')
UNION ALL
SELECT 6 AS score,r.* FROM mytable r WHERE match LIKE CONCAT(SUBSTRING('1234567890',1,6),'%')
UNION ALL
SELECT 10 AS score,r.* FROM mytable r WHERE match LIKE CONCAT(SUBSTRING('1234567890',1,10),'%')
) AS tmp
ORDER BY score DESC
LIMIT 1;
什么最终起作用-
SELECT `function`,`destination`
FROM reroute
WHERE `group` = '${ARG2}'
AND `name` = 0
AND '${ARG1}' LIKE concat(`match`,'%')
ORDER BY length(`match`) DESC LIMIT 1