、およびフィールドlanguage_stringsで呼び出されるMySQLテーブルを介して国際化をサポートするPHP/MySQLベースのWebアプリケーションがあります。string_idlang_idlang_text
選択した言語で文字列を表示する必要がある場合は、次の関数を呼び出します。
public function get_lang_string($string_id, $lang_id)
{
$db = new Database();
$sql = sprintf('SELECT lang_string FROM language_strings WHERE lang_id IN (1, %s) AND string_id=%s ORDER BY lang_id DESC LIMIT 1', $db->escape($lang_id, 'int'), $db->escape($string_id, 'int'));
$row = $db->query_first($sql);
return $row['lang_string'];
}
これは完全に機能しますが、多くのデータベースクエリが実行されている可能性があるのではないかと心配しています。たとえば、メインメニューには5つのリンクテキストがあり、そのすべてがこの関数を呼び出します。
language_strings選択したテーブルの結果全体lang_idをPHP配列にロードし、それを関数から呼び出す方が速いでしょうか?潜在的に、それはその多くが冗長である巨大な配列になるでしょうが、明らかにそれは多くではなくページのロードごとに1つのデータベースクエリになるでしょう。
誰かがこれを行う別のより効率的な方法を提案できますか?