Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算单个查询中另一个表的行数_Php_Mysql_Sql - Fatal编程技术网

Php 计算单个查询中另一个表的行数

Php 计算单个查询中另一个表的行数,php,mysql,sql,Php,Mysql,Sql,我目前有以下查询从表posts中获取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_res

我目前有以下查询从表
posts
中获取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_vots
中获取帖子的向上投票数和向下投票数,该表包含以下列:

pv_id | pv_ip | pv_type | pv_postid | pv_userid
pv_类型
为0(向下投票)或1(向上投票)

目前,我可以将此SQL放在显示每个帖子的foreach循环中,但这样做效率很低,因为它在循环的每个迭代中执行多个查询

有没有办法在上面的第一个查询中计算出一篇文章的得票数?试试这个查询

SELECT p_id,p_title,p_date,p_userid,p_world,p_views,p_thumb,p_link,u_username,
sum(IF( pv.pv_type=  '1', 1 ,  0 ))  as upvote, sum(IF( pv.pv_type=  '0', 1 ,  0 ))  as downvote
FROM posts INNER JOIN users ON u_id = p_userid 
JOIN post_votes pv ON pv.pv_postid = posts.p_id 
ORDER BY p_hotness DESC
LIMIT 50
并对未投票和有投票尝试此查询

SELECT p_id,p_title,p_date,p_userid,p_world,p_views,p_thumb,p_link,u_username,
(select sum(IF( pv.pv_type=  '1', 1 ,  0 )) from post_votes pv where pv_postid=posts.p_id ) as upvote,(select sum(IF( pv.pv_type=  '0', 1 ,  0 )) from post_votes pv where pv_postid=posts.p_id ) as downvote 
FROM posts INNER JOIN users ON u_id = p_userid  ORDER BY p_hotness DESC LIMIT 50

谢谢,除了在0之前和限制50之后有一个`字符,这给了我一个错误-删除那些有效的字符。
SELECT p_id,p_title,p_date,p_userid,p_world,p_views,p_thumb,p_link,u_username,
(select sum(IF( pv.pv_type=  '1', 1 ,  0 )) from post_votes pv where pv_postid=posts.p_id ) as upvote,(select sum(IF( pv.pv_type=  '0', 1 ,  0 )) from post_votes pv where pv_postid=posts.p_id ) as downvote 
FROM posts INNER JOIN users ON u_id = p_userid  ORDER BY p_hotness DESC LIMIT 50