2

我有一个国家名称的替代拼写表:

使用名称、Alt1、Alt2、Alt3、Alt4
[...]
Bahamas, "Bahamas, The"
Bolivia
Bosnia and Herzegovina, Bosnia & Herzegovina
[...]

(有些国家有 0 个替代拼写,其他最多 4 个。)

给定一个国家字符串,在性能方面返回第一列元素的最佳解决方案是什么?(在大多数情况下,与替代拼写的数量无关,字符串与第一列匹配,不必进行名称匹配。在其他情况下,概率均匀分布在第 2-X 列中。

(最好使用 JavaScript 或 PHP,谢谢 :))

4

1 回答 1

1

在我看来,我认为你应该把它放在数据库中的两个单独的表中:

countries: id, ..., ...

countries_names: country_id, default (bool or enum('yes', 'no')), name

在 name 列上放置索引,以便您可以快速搜索正确的 name 和 country_id:

SELECT name FROM countries_names
WHERE default = 'yes'
AND country_id = (SELECT country_id FROM countries_names
                  WHERE name = 'search_string'
                  LIMIT 1)
LIMIT 1

(可选,LEFT JOIN如果您需要主表中的更多信息,您可以添加一个)

其他选项是仅为替代名称创建一个表:

countries: id, name, ..., ...

countries_alternative_names: country_id, name

但是在查找第一个匹配项时,您必须在两个表中进行搜索。


编辑:静态 JavaScript 解决方案:

function getCountryName(var name) {
  switch (name) {
    case "Bahamas" :
    case "The Bahamas" :
      return "Bahamas";
    case "Bolivia" :
      return "Bolivia";
    case "Bosnia and Herzegovina" :
    case "Bosnia & Herzegovina" :
      return "Bosnia and Herzegovina"

    // ...

    default :
      return null;
  }
}
于 2011-03-07T14:32:50.263 回答