我有一个获取用户详细信息的函数,并返回一个由每个用户数组和其相关数据组成的关联数组。我的函数的工作原理除了当它必须从mySQL中获取大量行时不起作用。如何在PHP的foreach循环中优化大型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
}
有人告诉我,我应该移动绑定PARAM语句在我的情况foreach循环之外,但我已尽力,我不断收到错误“MySQL已经走了”的消息。当我可能一次查询10,000个ID时,如何优化从mysql查询?
请参考下面的代码片段进行详细说明。
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;
}
如果它显示那么为什么不使用分页? – 2014-12-05 07:16:07
@AbhikChakraborty - 对不起,我不确定你的意思是分页。 – Cryssie 2014-12-05 07:16:51
我的意思是,如果你有一个显示页面,你从数据库列出所有用户,你可以选择第一次显示100分页,检查这个链接我的意思是分页http://www.datatables.net /examples/basic_init/alt_pagination.html – 2014-12-05 07:22:52