【发布时间】:2016-02-07 15:23:38
【问题描述】:
我目前有以下查询来从表 posts 中获取帖子。
$stmt = $db->prepare(
"SELECT p_id,p_title,p_date,p_userid,p_world,p_views,p_thumb,p_link,u_username
FROM posts
INNER JOIN users
ON u_id = p_userid
ORDER BY p_hotness DESC
LIMIT 50");
$stmt->execute();
$stmt->bind_result($p_id,$p_title,$p_date,$p_userid,$p_world,$p_views,$p_thumb,$p_link,$u_username);
while($stmt->fetch()){
$posts[] = [
'p_id' => $p_id,
'p_title' => $p_title,
'p_date' => $p_date,
'p_userid' => $p_userid,
'p_world' => $p_world,
'p_views' => $p_views,
'p_thumb' => $p_thumb,
'p_link' => $p_link,
'u_username' => $u_username
];
};
$stmt->close();
但是,我还想从另一个表 post_votes 中获取帖子的赞成和反对数,该表具有以下列:
pv_id | pv_ip | pv_type | pv_postid | pv_userid
pv_type 是 0(反对)或 1(赞成)。
SELECT COUNT(*) FROM post_votes WHERE pv_postid = ? AND pv_type = 1 // upvotes
SELECT COUNT(*) FROM post_votes WHERE pv_postid = ? AND pv_type = 0 // downvotes
目前,我可以将此 SQL 放在显示每个帖子的 foreach 循环中,但这效率低下,因为它在循环的每次迭代中执行多个查询。
有什么方法可以计算上面第一个查询中帖子的赞成票和反对票数吗?
【问题讨论】: