我有一个数据库表,其中包含任何(不相关)的地址。
现在的问题是,如果该行包含"Antwerp"、"Antwerpen"或"Anvers",则它是相同的,但数据库不知道这一点。
我可以有一个包含所有比利时城市的数据库表,我可以让用户通过选择框输入城市,这样就不会有拼写错误和城市不同语言的空间。
这是可行的,但在某些情况下,我想用facebook数据自动填充输入字段,但我不知道如何确定哪个城市与facebook中的城市匹配,因为城市的语言取决于用户。
理想情况下,我会有一个包含所有城市及其翻译的数据库表,但我还没有找到。
我唯一能想到的就是放弃自动填充功能…:(
有人有其他建议吗?
Harvest数据库来自维基百科或这里(谷歌搜索"比利时城市列表"),或我们这个世界城市数据库(所有结果来自谷歌)。
然后创建这样的表模式:
CREATE TABLE cities (
id INT AUTO_INCREMENT,
state_id INT, -- If you want to
name VARCHAR(255),
status ENUM( 'confirmed', 'user_added')
PRIMARY (id),
INDEX (status),
UNIQUE KEY (name)
)
您还可以实现这样的同义词处理:
CREATE TABLES synonyms (
id INT AUTO_INCREMENT,
city_id INT,
name VARCHAR(255),
PRIMARY(id),
UNIQUE(nane)
)
然后,您可以将城市中的所有值克隆到同义词中(数据将保证完整性),选择将很容易,也可以只选择同义词(选择它们时编写更复杂的内部联接),并仅在设置新值时使用它们。
无论如何,在表单中,您将创建带有"未列出"等选项的字段城市(选择框),这将允许用户手动添加城市(状态为user_added
),管理员必须手动检查/添加/删除/编辑。
您可以使用Google地理编码API。只需通过GET请求发送地址,并使用返回的formatted_address
字段。这应该会给你正确的信息。
我也试过一次Google Places API,但结果很糟糕。
PHP/MySQL的示例代码可以在这里找到。你必须稍微修改一下这个例子,但它应该会给你一个线索。