MySQL 仅在给出完整号码时才匹配区号
MySQL match area code only when given the full number
我有一个数据库,其中列出了一些区号、区号 + 办公室代码和一些整数以及一个动作。我希望它 return 由给定的数字得到结果,但我不确定如何完成它。我有一些 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语句来区分[=15=的匹配] 和 234843XXXX
,因为我只能匹配一个 return。基本上如果它不匹配 10 位数字,那么它会检查 6 位数字,然后它会检查 3 位数字。
我希望这是有道理的,我没有任何其他方法来格式化数字,它必须通过 Asterisk 中的 ODCB 连接仅通过一个 SQL 查询和 return 来完成.
试试这个
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
我有一个数据库,其中列出了一些区号、区号 + 办公室代码和一些整数以及一个动作。我希望它 return 由给定的数字得到结果,但我不确定如何完成它。我有一些 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语句来区分[=15=的匹配] 和 234843XXXX
,因为我只能匹配一个 return。基本上如果它不匹配 10 位数字,那么它会检查 6 位数字,然后它会检查 3 位数字。
我希望这是有道理的,我没有任何其他方法来格式化数字,它必须通过 Asterisk 中的 ODCB 连接仅通过一个 SQL 查询和 return 来完成.
试试这个
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