0

需要你的大力帮助。我需要你们所有好人的建议。

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

我想做的是,

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

我有两种选择

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

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

  2. 将单列的国家数据添加为国家代码并存储美国、英国、澳大利亚,如果用户的位置是美国,

    $sql=mysql_fetch_array(mysql_query("SELECT * FROM content_table WHERE country_code!=''")); $pieces = explode(",", $sql['country_code']); foreach($pieces as $val){ if($country_code=="US") //display content }

注意:国家数量可能会根据我的需要而有所不同

克服这个问题的最佳做法是什么,

  • 对不同的国家使用不同的列进行快速搜索,但我认为添加更多列并不好
  • 使用单列并迭代逗号分隔值需要更多计算

我该怎么办..??请就此给我建议..或者你有什么比这更好的主意吗..?谢谢

4

3 回答 3

3

我只想说 - 创建一个国家表

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连接,例如

SELECT *
FROM `content` c
LEFT JOIN content_country cc ON cc.content_id = c.id
AND cc.country_id
IN ( 2, 4 )
于 2012-08-23T09:17:32.277 回答
1
$sql=mysql_fetch_array(mysql_query("SELECT * 
    FROM content_table 
    WHERE country_code = '' 
    OR country_code REGEXP ',?". $user_country_code .",?'"));

country_code如果我对您的理解很好,您是否只想在用户国家代码在该字段中或未指定时才向用户显示元素country_code

即使数据库解决方案会更好,也应该这样做。

于 2012-08-23T09:27:37.827 回答
0
Try It:

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

$pieces = explode(",", $sql['country_code']); 


# No Need to run loop 
#foreach($pieces as $val)
#{ 
#    if($country_code=="US") //display content 
#}

if(!empty($pieces))    // 
{

    if(in_array($user_country_code,$pieces ))
    {
        echo "display content";
    }
}
else
{
        echo "display content";    // for all country
}

Use in_array() except of loop. I guess you will use in on user login so you will have user_country_code.
于 2012-08-23T09:24:04.807 回答