php - 使用 mysql 显示特定国家/地区的 Web 内容的最佳方式

标签 php mysql

需要你的大力帮助。 我需要你们这些好人的建议。

我有一些内容只需要向几个国家显示。我可以使用 Geoip 获取用户的国家/地区。我将我的内容存储在带有国家/地区代码字段的 MySQL 数据库中。国家/地区代码可以为空或任何单个代码或一组逗号分隔值

我想做的是,

  1. 检查 country_code,如果为空,则向所有用户显示该内容。
  2. 如果 country_code 不为空且只有一个值,则仅显示给定 country_code 用户的内容。
  3. 如果 country_code 是一组逗号分隔值,则显示所有逗号分隔国家/地区用户的内容。

我有两个选择

  1. 分别为每个国家添加数据列并显示内容 例如,美国、英国、澳大利亚三个国家的三列,如果用户的位置是美国,

    $sql=mysql_fetch_array(mysql_query("SELECT * FROM content_table WHERE US=='$country_code'"));

  2. 为单列添加国家数据作为 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/

相关文章:

MYSQL - 选择一条特定记录加上随机记录

mysql - 排名搜索结果

php - 另一个托管问题 : Linux, Apache2、PHP5、PostGreSQL 8.3

php - mysql select 和 jsonencode 数据

php - 使用 php excel 将 Logo 添加到 excel 工作表

php - PHP 中的共享内存文件

mysql - 为什么这个mysqli php调用失败?

mysql - 优化百分比计算SQL查询

java - mysql show processlist 显示 11 个永不消失的连接

java - 关于DSE检索的查询