【问题标题】:searching needle when we know the haystack in sql [closed]当我们知道sql中的大海捞针时寻找针头[关闭]
【发布时间】:2015-04-13 14:31:13
【问题描述】:

我有一个包含许多国家代码及其对应国家名称的数据库 例如:

mauritius   230
canada      1
testcountry 1234

每个国家/地区可能有 1 到 5 个起始编号。用户将输入任何电话号码,例如 23012345678,输出应为mauritius

如何在数据库中执行这样的 sql 查找?我在想我可以制作输入数据的 5 个子字符串:

2
23
230
2301
23012

并找到匹配项,但这并不有效。知道如何进行吗? (php)

【问题讨论】:

  • 您有世界上使用的呼叫代码列表吗?你有没有想过如何解决这个问题?你有没有尝试过什么?您知道,我们不是来为您工作的。
  • 是的,我已经有一个包含所有国家代码的数据库,当我执行这样的操作时,我已经得到了答案。首先,如果答案不是 = 1,我使用子字符串 2% 进行搜索,然后我搜索 23%,然后搜索 230%,然后搜索 2301%,直到找到答案 1 行

标签: php html mysql phpmyadmin codeigniter-2


【解决方案1】:

您可以通过在列后使用通配符将您的代码列与电话号码匹配来使用类似查询,这样它只会匹配起始字符​​p>

select *
from countries
where '23012345678' like concat(`code`,'%') > 0

DEMO

从 cmets 编辑

您可以在代码列上使用length() 函数,并为最匹配的国家/地区代码订购长度最长的结果

select *
from countries
where '23012345678' like concat(`code`,'%') > 0
order by length(`code`) desc 
limit 1

DEMO 2

【讨论】:

  • 你好,这很有帮助。但是我尝试编辑它并添加了一个代码为 2301 的测试国家,现在响应来自 2 个国家。是否存在一种方法可以让我得到最匹配的答案?比如如果我有 230 mauritius 和 2301 testcountry 那么我会选择 2301 吗?
  • @RajneeshKumarGobin 查看我的更新答案
  • 这正是我需要的:)
  • @RajneeshKumarGobin 您可以通过单击勾选选项将此答案标记为已接受
猜你喜欢
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
相关资源
最近更新 更多