MySQL从另一个表插入国家iso或国家ID

时间:2013-07-18 03:15:31

标签: php mysql database

我想在我的数据库中插入每个访问者的国家/地区。 Maxmind返回我可以存储在VARCHAR(2)中的2个字母的国家ISO,它将使用2个字节,或者,我可以使用将使用1个字节的UNSIGNED TINYINT,并且将来自与所有国家签订的表格。

然而我碰到了一个凹凸;我需要MyISAM引擎进行快速插入,但MyISAM不支持FOREIGN KEYS,所以我想对于每次插入,我都必须在countries表中进行选择以检索国家/地区ID。

我不知道什么是最好的选择,我绝对需要使用MyISAM,因为会有很多插入,但我不想经常让SELECTs来检索国家/地区ID

3 个答案:

答案 0 :(得分:1)

如果您只需要2个字母的ISO国家/地区代码(而不是国家/地区名称,语言或其他信息),那么我会说将其存储为CHAR(2)而不使用外部表格会减少资源消耗而不是将其存储为SMALLINT(TINYINT不足以涵盖所有国家/地区),并查找其他表格。

注意:在这种情况下不需要VARCHAR(2),CHAR(2)会更有效。

答案 1 :(得分:0)

您可以从国家/地区表格创建关联数组。将国家/地区ID作为此阵列的键。然后将其提供给您的观点。因此,在视图中,您可以对国家/地区阵列进行查找并显示相关国家/地区。例如

<?php echo $country[$customer['country_id']]['country_name']; ?>

答案 2 :(得分:0)

获得FK支持与没有FK支持之间的唯一区别是确保完整性。如果您使用支持FK的引擎,则不允许您在没有该记录ID的情况下设置该国家。

那说国家的数量是半静态的,我们只谈数百......你可能会把所有这些保留在内存中,并且ID是可用的。

或者,您可以在插入期间执行选择,如:

INSERT INTO sometable (col1,col2,country_id) VALUES('val1','val2', (SELECT id FROM countries WHERE iso_code = ?))

?将是您的ISO值。