【发布时间】:2012-08-16 14:10:11
【问题描述】:
我有一个基于 PHP/MySQL 的 Web 应用程序,它通过名为 language_strings 的 MySQL 表提供国际化支持,其中包含 string_id、lang_id 和 lang_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个链接文本,都调用这个函数。
将所选lang_id 的整个language_strings 表结果加载到PHP 数组中,然后从函数中调用它会更快吗?这可能是一个巨大的数组,其中大部分是冗余的,但显然它是每个页面加载一个数据库查询,而不是很多。
谁能提出另一种更有效的方法?
【问题讨论】:
-
您的查询以
LIMIT 1结尾,1 的数组可以有多大? -
@EliasVanOotegem 这就是我目前的代码,一次只检索一个,但该函数被多次调用。如果我在表中查询特定 lang_id 的所有记录,那么该数组将有 1000 条或更多记录。
-
至少对于您的应用程序的“静态”部分,例如 主菜单,我建议您使用缓存版本的菜单而不是查询数据库。比如
menu.en.html、menu.de.html等。
标签: php mysql arrays performance