0

あなたからの大きな助けが必要です。善良な皆さんからのアドバイスが必要です。

いくつかの国にのみ表示する必要があるコンテンツがあります。Geoip を使用してユーザーの国を取得しても問題ありません。country_code フィールドを使用してコンテンツを MySQL データベースに保存しています。国コードは空にすることも、単一のコードまたはグループにすることもできます。コンマ区切り値

私がやりたいことは、

  1. country_code を確認し、空の場合は、そのコンテンツをすべてのユーザーに表示します。
  2. country_code が空ではなく、値が 1 つのみの場合、指定された country_code ユーザーのコンテンツのみを表示します。
  3. country_code がカンマ区切り値のグループの場合、カンマ区切りのすべての国のユーザーのコンテンツを表示します。

これを行うには2つのオプションがあります

  1. 国のデータ列を個別に追加しeach、コンテンツを表示します。たとえばthree columns、米国、英国、オーストラリアの 3 つの国の場合で、ユーザーの場所が米国の場合は、

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

  2. 単一列の国データをcountry_codeとして追加し、US、UK、AUを保存し、ユーザーの場所がUSの場合、

    $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/innerjoinを使用します。

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 に答える