-1

我的需要是从mysql中选择目的地

该数据库包含以下信息

 IBIS, COUNTRY, REGION
 "AFG", "93";
 "AFG Mobile AWCC", "93", "70"
 "AFG Mobile ETSLAT", "93", "78"
 "AFG Mobile AREEBA", "93", "77"
 "AFG Mobile", "93", "75"

我正在寻找信息 ZONE COUNTRY + 结果应该是 IBIS

Search 1 :9378555555 => Mobile AFG ETSLAT
Search 2 :9377755555 => Mobile AFG AREEBA
Search 3 :9399999999 => AFG

感谢您的阅读和回复:)

+++++更新

"ALB Fixed ALBTEL";"355";"4249"
"ALB Tirana";"355";"422, 423, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248"

Country var(3) 和 Region 是 concat ...

Search 1 :355424955555 => ALB Fixed ALBTEL
Search 2 :35542405555  => ALB Tirana
4

1 回答 1

0

我会使用这样的东西:

SELECT
  *
FROM
  yourtable
WHERE
  COUNTRY = LEFT('9399999999', 2)
  AND (REGION = SUBSTRING('9399999999', 3, 2) OR REGION IS NULL)
ORDER BY
  REGION IS NULL
LIMIT 1

在此处查看小提琴。

编辑

不是有史以来最干净的解决方案,但对我来说看起来不错:

SET @num = '35542405555';

SELECT *
FROM
  yourtable
WHERE
  @num LIKE CONCAT(COUNTRY, '%')
  AND (REGION IS NULL
       OR FIND_IN_SET(SUBSTRING(@num, LENGTH(COUNTRY)+1, 2), REPLACE(REGION, ' ', ''))
       OR FIND_IN_SET(SUBSTRING(@num, LENGTH(COUNTRY)+1, 3), REPLACE(REGION, ' ', ''))
       OR FIND_IN_SET(SUBSTRING(@num, LENGTH(COUNTRY)+1, 4), REPLACE(REGION, ' ', '')))
ORDER BY
  REGION IS NULL
LIMIT 1

在这里拉小提琴。这仅限于 2、3 或 4 个字符的区域。

于 2013-03-28T09:25:31.373 回答