我有一张桌子上有不同的国名拼法:
使用名称,Alt1,Alt2,Alt3,Alt4
..。
巴哈马“巴哈马”
玻利维亚
波斯尼亚和黑塞哥维那、波斯尼亚和黑塞哥维那
..。
(有些国家有0种备选拼写,其他多达4种。)
给定一个国家字符串,从性能上讲,返回第一列中的元素的最佳解决方案是什么?(在大多数情况下,不依赖于可选拼写的数量,字符串与第一列匹配,不必匹配名称。在其他情况下,概率均匀分布于第2-X列。
(最好是在JavaScript或PHP中,谢谢:)
发布于 2011-03-07 14:32:50
在我看来,我认为您应该将它放在数据库中的两个单独的表中:
countries: id, ..., ...
countries_names: country_id, default (bool or enum('yes', 'no')), 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;
}
}https://stackoverflow.com/questions/5220750
复制相似问题