我有一张表格,其中包含国家/地区名称的替代拼写:
使用名称,Alt1,Alt2,Alt3,Alt4
[...]
巴哈马,“巴哈马,”
玻利维亚
波斯尼亚和黑塞哥维那,波斯尼亚和波黑黑塞哥维那
[...]
(有些国家有0种替代拼写,其他拼写有4种。)
给定一个国家/地区字符串,在第一列中返回元素的最佳解决方案是性能方面的? (在大多数情况下,与替代拼写的数量无关,字符串与第一列匹配,不必进行名称匹配。在其他情况下,概率均匀分布在第2-X列。
(最好是JavaScript或PHP,谢谢:))
答案 0 :(得分:1)
在我看来,我认为你应该将它放在数据库中的两个单独的表中:
countries: id, ..., ...
countries_names: country_id, default (bool or enum('yes', 'no')), 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;
}
}