需要你的大力帮助。 我需要你们这些好人的建议。
我有一些内容只需要向几个国家显示。我可以使用 Geoip 获取用户的国家/地区。我将我的内容存储在带有国家/地区代码字段的 MySQL 数据库中。国家/地区代码可以为空或任何单个代码或一组逗号分隔值
我想做的是,
- 检查 country_code,如果为空,则向所有用户显示该内容。
- 如果 country_code 不为空且只有一个值,则仅显示给定 country_code 用户的内容。
- 如果 country_code 是一组逗号分隔值,则显示所有逗号分隔国家/地区用户的内容。
我有两个选择
分别为
每个
国家添加数据列并显示内容 例如,美国、英国、澳大利亚三个国家的三列
,如果用户的位置是美国,$sql=mysql_fetch_array(mysql_query("SELECT * FROM content_table WHERE US=='$country_code'"))
;为单列添加国家数据作为 country_code 并存储 US、UK、AU,如果用户的位置是美国,
$sql=mysql_fetch_array(mysql_query("SELECT * FROM content_table WHERE country_code!=''")); $pieces = explode(",", $sql['country_code']); foreach($pieces as $val){ 如果($country_code==“美国”) //显示内容 }
注意:国家数量可能因我的需要而异
克服这个问题的最佳实践是什么,
- 对不同的国家/地区使用不同的列可以进行快速搜索,但我认为添加更多的列并不好
- 使用单列和迭代逗号分隔值需要更多计算
我该怎么办……?? 请就此给我建议.. 或者你有比这更好的主意..?谢谢
最佳答案
我只想说——创建一个国家表
countries
id, code, name
1, UK , United Kingdom
.....和其他国家/地区
在您的content
表中添加另一列country_id 或country_code
Content
id, title, body, country_code
1, some text, more text, 1
然后在你的sql中
只需select * from content where country_code = 'UK' or country_id = 1
//取决于你选择的选项
或
创建一个单独的链接表以允许多个国家/地区的内容
content_country
content_id, country_id
1, 2
1, 1
1, 3
要获取您的查询内容,请使用 left/right/inner
join 例如。
SELECT *
FROM `content` c
LEFT JOIN content_country cc ON cc.content_id = c.id
AND cc.country_id
IN ( 2, 4 )
关于php - 使用 mysql 显示特定国家/地区的 Web 内容的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088355/