【发布时间】:2014-12-05 07:14:52
【问题描述】:
我有一个函数可以获取用户详细信息并返回一个关联数组,该数组由每个用户及其相关数据的数组组成。我的函数可以工作,只是当它必须从 mySQL 获取大量行时它不能正常工作。
function function_name($DB, $id)
{
//Prepare, bind and execute statements
//Returns one value or an array
}
function main_function($DB, $id_list)
{
foreach($id_list as $user_id)
{
//Calls function_name
$data = function_name($DB, $user_id);
}
//Returns a nested associative array
}
有人告诉我,在我的情况下,我应该将绑定参数语句移到 foreach 循环之外,但我已经尝试过,但一直收到错误消息“MySQL 已消失”。当我可能一次查询 10,0000 个 id 时,如何优化从 mysql 的查询?
详细解释请参考下面的代码sn-p。
function getUserEvent($DB_3308, $user_id)
{
$user_event = array ();
$sql_get_user_event = "SELECT * FROM user_event WHERE user_id = ?";
$statement_user_event = $DB_PUMA_3306->link->prepare ( $sql_get_user_event);
$statement_user_event ->bind_param ( "s", $user_id );
$statement_user_event ->execute ();
if ($rs_user_event = $statement_user_event->get_result ())
{
while ( $row = $rs_user_event->fetch_assoc () )
{
$user_event [] = $row;
}
}
return $user_event;
}
function getUserDetails($DB_3306, $DB_3308, $user_list)
{
$user_details = array ();
foreach ( $user_list as $user_id )
{
$temp = array ();
$user_personal = null;
$user_event = null;
$user_personal = getUserContact ( $DB_3306, $user_id );
$user_event = getUserEvent( $DB_3308, $userid );
$temp ['user_id'] = $user_id;
$temp ['full_name'] = $user_personal ['full_name'];
$temp ['tel_no'] = $user_personal ['tel_no'];
$temp ['email'] = $user_personal ['email'];
$temp ['events'] = $user_event ;
$user_details [] = $temp;
}
return $user_details;
}
【问题讨论】:
-
如果是为了显示,那为什么不使用分页呢?
-
@AbhikChakraborty - 很抱歉,我不确定您所说的分页是什么意思。
-
我的意思是,如果您有一个显示页面,其中列出了数据库中的所有用户,您可以选择在第一次分页时显示 100,查看此链接我所说的分页是什么意思 @987654321 @
-
用于展示。但是,当我在这里没有显示更多计算内容时,它是否有效?例如计算结果总数,比较两个数组以获得相交总数等?
-
当然它可以工作,同时加载所有用户从来都不是一个好主意,而且更多地存储在数组中会耗尽所有内存。您可以在 PHP 上找到许多分页脚本,并且可以自定义您想要的方式。
标签: php mysql foreach query-optimization