我有以下php
代码:
$user_id = $user["id_user_key"];
$stmt = $db->prepare("CALL spGetUserProducts(?)");
$stmt->bind_param('i', $user_id);
$stmt->execute();
$result = $stmt->get_result();
$data = array();
while($row = $result->fetch_assoc()) {
$row_array = array();
$row_array["id"] = $row["id"];
$row_array["pname"] = $row["pname"];
$row_array["picon"] = $row["picon"];
$row_array["menuItems"] = array();
$product = $row["id"];
//loop
$result_opt = $db->query("CALL spGetUserProductViews($user_id, $product)");
while ($opt_fet = $result_opt->fetch_assoc()) {
$row_array["menuItems"][] = array(
"id" => $opt_fet["id"],
"vname" => $opt_fet["vname"],
"isheader" => $opt_fet["isheader"]
);
}
array_push($data, $row_array);
}
$stmt->close();
echo json_encode($data);
第一个循环可以保留$db
,换句话说:第一个准备好的语句正在执行中,并给我结果。第二个:
$result_opt = $db->query("CALL spGetUserProductViews($user_id, $product)");
给我false
。当我在循环外尝试此语句时,它确实起作用。
他有什么想法吗?
答案 0 :(得分:2)
我发现df.pivot_table('items', 'store', 'day', fill_value=0, aggfunc='count')
无法同时处理两个查询,因为df.groupby(['store', 'day']).count().unstack().fillna(0)
默认使用无缓冲查询。现在,我本可以进行深入研究(例如,使用mysqli
),但是我也意识到我希望将数据库的负载保持在最低水平。
我的解决方案:
mysqli
因此,现在我首先从两个对象中生成$stmt->store-result()
。然后我对菜单进行遍历,然后对各项进行遍历。当$data = array();
$user_id = $user["id_user_key"];
//menus -> products
$stmt = $db->prepare("CALL spGetUserProducts(?)");
$stmt->bind_param("i", $user_id);
$stmt->execute();
$result = $stmt->get_result();
$menus = array();
while($row = $result->fetch_assoc()) {
$menus[] = $row;
}
$stmt->close();
//items -> views
$stmt = $db->prepare("CALL spGetUserProductViews(?)");
$stmt->bind_param("i", $user_id);
$stmt->execute();
$result = $stmt->get_result();
$items = array();
while($row = $result->fetch_assoc()) {
$items[] = $row;
}
$stmt->close();
//generate object
//loop menus
foreach($menus as $m){
$row_array = array();
$row_array["id"] = $m["id"];
$row_array["pname"] = $m["pname"];
$row_array["picon"] = $m["picon"];
$row_array["menuItems"] = array();
//loop items
foreach($items as $i) {
if($m["id"] == $i["id_product"]) {
$row_array["menuItems"][] = array(
"id" => $i["id"],
"vname" => $i["vname"],
"isheader" => $i["isheader"]
);
}
}
array_push($data, $row_array);
}
echo json_encode($data);
等于arrays
时,将生成带有该特定菜单项的$menu["id"]
。
编辑
从数据库中提取数据后,我首先必须检查$items["id_product"]
是否包含数据:
array