私は、ユーザーがさまざまな言語でプロファイルを持つことができる多言語 Web サイトを持っています。
さて、私はウェブサイトを「英語」言語で表示しているユーザーなので、他のメンバーのプロフィール ページに移動すると、そのメンバー プロフィールが「英語」で表示されるはずですが、そのプロフィールがその言語で利用できない場合は、そのメンバー「main_lang」にそのプロファイルが表示されるはずです。
したがって、「published_profile_langs」という列を持つ「members」テーブルがあります。この列には、各メンバーがプロファイルを公開した言語がカンマ区切りで保存されます。「英語、スペイン語」、および「main_lang」列は次のとおりです。ユーザーのメイン言語 (サインアップ手順の詳細を求めているため、彼のプロフィールは間違いなく main_lang で公開されています)。
一方、メンバーの詳細は、「members_details_english」、「members_details_spanish」、「members_details_french」など、さまざまなテーブルに格納されます。
クエリに参加したいのですが、私が管理した方法では不可能なようです。現在、上記のシナリオでメンバーの詳細をロードするために 2 つのクエリを使用する必要があります。「members_profile.php」のコードは次のとおりです。
// FIRST QUERY
$check_member = mysql_query("SELECT main_lang, profile_published_langs FROM members WHERE id = '$this_user_id'");
while($row = mysql_fetch_array($check_member)){
$this_main_lang = $row['main_lang'];
$this_profile_published_langs = $row['profile_published_langs'];
}
$this_profile_published_langs_arr = explode(',', $this_profile_published_langs);
if(!in_array($lang, $this_profile_published_langs_arr)) $lang = $this_main_lang;
$details_table = 'members_details_' . $lang;
// SECOND QUERY
$get_details = mysql_query("SELECT * FROM $details_table WHERE member_id = '$this_user_id'");
while($row_details = mysql_fetch_array($get_details)){
//blah blah
}
これを達成するためのより良い方法はありますか?たぶん、2回ではなく1回クエリすることはできますか?このシナリオのより良いデータベース構造はありますか?
どんな種類の助けにも感謝します