Php 使用mysql显示特定国家/地区的web内容的最佳方式

Php 使用mysql显示特定国家/地区的web内容的最佳方式,php,mysql,Php,Mysql,我需要你的大力帮助。 我需要你们这些好人的建议 我有一些内容只需要向少数几个国家显示。我可以使用Geoip获取用户的国家。我将我的内容存储在MySQL数据库中,带有国家代码字段。国家代码可以为空,也可以是任何单个代码或逗号分隔的值组 我想做的是 检查国家/地区代码,如果为空,则为所有用户显示该内容 如果国家/地区代码不为空且仅为单个值,则仅显示给定国家/地区代码用户的内容 如果国家/地区代码是一组以逗号分隔的值,则显示所有以逗号分隔的国家/地区用户的内容 我有两个选择来做这件事 分别为每个国家/

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

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

我想做的是

  • 检查国家/地区代码,如果为空,则为所有用户显示该内容
  • 如果国家/地区代码不为空且仅为单个值,则仅显示给定国家/地区代码用户的内容
  • 如果国家/地区代码是一组以逗号分隔的值,则显示所有以逗号分隔的国家/地区用户的内容
  • 我有两个选择来做这件事

  • 分别为每个国家/地区添加数据列并显示内容 例如,美国、英国、非盟三个国家的
    三列
    ,如果用户的位置是美国

    $sql=mysql\u fetch\u数组(mysql\u查询(“SELECT*FROM content\u table WHERE US=='$country\u code'))

  • 为单列添加国家/地区数据,作为国家/地区代码,并存储美国、英国、澳大利亚,如果用户的位置是美国

    $sql=mysql\u-fetch\u数组(mysql\u查询(“从国家代码所在的内容表中选择*);
    $pieces=explode(“,”,$sql['country_code']);
    foreach($val){
    如果($国家/地区代码==“美国”)
    //显示内容
    }

  • 注:国家/地区的数量可能根据我的需要而有所不同

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

    • 在不同的国家使用不同的栏目进行快速搜索,但我认为增加更多的栏目并不好
    • 使用单列和迭代逗号分隔的值需要更多的计算
    我该怎么办。。??
    请给我一些建议。。或者你还有比这更好的主意吗。。?谢谢

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

    countries
    id, code, name
    1, UK , United Kingdom 
    
    。。。。。以及其他国家

    content_country
    content_id, country_id
    1, 2
    1, 1
    1, 3
    
    content
    表中,只需添加另一列country\u id或country\u code即可

    Content
    id, title, body, country_code
    1, some text, more text, 1
    
    然后在sql中

    只需
    从country\u code='UK'或country\u id=1的内容中选择*即可
    //具体取决于您选择的选项

    创建一个单独的链接表,以允许多个国家/地区的内容

    content_country
    content_id, country_id
    1, 2
    1, 1
    1, 3
    
    要获取查询内容,请使用
    left/right/internal
    join,例如

    SELECT *
    FROM `content` c
    LEFT JOIN content_country cc ON cc.content_id = c.id
    AND cc.country_id
    IN ( 2, 4 )
    

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

    countries
    id, code, name
    1, UK , United Kingdom 
    
    。。。。。以及其他国家

    content_country
    content_id, country_id
    1, 2
    1, 1
    1, 3
    
    content
    表中,只需添加另一列country\u id或country\u code即可

    Content
    id, title, body, country_code
    1, some text, more text, 1
    
    然后在sql中

    只需
    从country\u code='UK'或country\u id=1的内容中选择*即可
    //具体取决于您选择的选项

    创建一个单独的链接表,以允许多个国家/地区的内容

    content_country
    content_id, country_id
    1, 2
    1, 1
    1, 3
    
    要获取查询内容,请使用
    left/right/internal
    join,例如

    SELECT *
    FROM `content` c
    LEFT JOIN content_country cc ON cc.content_id = c.id
    AND cc.country_id
    IN ( 2, 4 )
    
    如果我理解您的意思,您希望仅当用户国家代码位于
    country\u code
    字段中或未指定
    country\u code
    时,才向用户显示元素吗

    这应该可以做到,即使数据库解决方案更好

    如果我理解您的意思,您希望仅当用户国家代码位于
    country\u code
    字段中或未指定
    country\u code
    时,才向用户显示元素吗


    这应该可以做到,即使数据库解决方案会更好。

    我之前给你写过一个答案。你可以在两个表中创建第二个表,将国家代码作为索引,第二个表只包含内容id+国家代码;然后在存在的地方(选择cc.*FROM
    content\u countries
    cc WHERE cc.country\u code=”。mysql\u real\u escape\u string($country\u code)。“'或cc.country\u code='ALL')感谢Fluffeh的回复。我已经阅读了你的帖子。很抱歉,我找不到解决我问题的方法。谢谢亲爱的朋友我之前给你写的答案。你可以在两个表中创建第二个表,用国家代码作为索引,第二个表只包含内容\u id+国家代码;然后在存在的地方(选择cc.*FROM
    content\u countries
    cc WHERE cc.country\u code=”。mysql\u real\u escape\u string($country\u code)。“'或cc.country\u code='ALL')感谢Fluffeh的回复。我已经阅读了你的帖子。很抱歉,我找不到解决我问题的方法。无论如何,谢谢亲爱的朋友谢谢HappyApe给你的即时回复。如果要显示两个或更多国家/地区的选定内容,该怎么办?作为你的代码,如果它只包含一个国家,我想这会很容易。请看上面的或部分-创建一个链接表content\u country(因此你有3个表,content,country,content\u country),谢谢HappyApe。我认为你的答案是最好的解决办法。唯一的问题是我需要为多个国家添加另一个表。我有多个内容表要显示,如上所述。那意味着我还需要几张桌子。谢谢你的帮助,伙计。我会接受你的答案,在检查了其他人的观点之后,好的..我已经接受了另一个答案作为解决方案,因为它对我来说是有意义的。我很感激你有价值的答案,并对它投了赞成票。谢谢你的帮助,没问题。每个解决方案都有自己的优缺点,所以如果另一个解决方案能更好地解决您的问题,那么就去做吧。感谢HappyApe为您提供的即时响应。如果要显示两个或更多国家/地区的选定内容,该怎么办?作为你的代码,如果它只包含一个国家,我想这会很容易。请看上面的或部分-创建一个链接表content\u country(因此你有3个表,content,country,content\u country),谢谢HappyApe。我认为你的答案是最好的解决办法。唯一的问题是我需要为多个国家添加另一个表。我有多个内容表要显示,如上所述。那意味着我还需要几张桌子。谢谢你的帮助,伙计。在检查了其他人的观点后,我会接受你的答案好的,我已经接受了另一个答案