简体   繁体   中英

select down and up votes for each post php mysql

I have a forum where users can post questions and can upvote and downvote.

I want to get the upvote and downvote of each post.

What i did previously was do that in 3 sets queries.

$data = mysqli_query($con,"select * from posts");
while($row = mysqli_fetch_assoc($data)){
  $pid  = $row['post_id'];
  $up = mysqli_fetch_assoc(mysqli_query("SELECT COUNT(*) as c FROM up WHERE post_id = $pid"))['c'];
  $down = mysqli_fetch_assoc(mysqli_query("SELECT COUNT(*) as c FROM down WHERE post_id = $pid"))['c'];
}

Can anyone show me how can i do these things in one single query because if a get a lot of posts in 1st query then there will be lots of queries to do.

You can use subqueries and put everything in the first query.

This could be a good start :

$data = mysqli_query($con, "select posts.*, " . 
                           "(SELECT COUNT(*) FROM up WHERE post_id = posts.post_id) as totalUp, " . 
                           "(SELECT COUNT(*) FROM down WHERE post_id = posts.post_id) as totalDown " .
                           "from posts");
while($row = mysqli_fetch_assoc($data)){
  // ...
}

you can use corelated subquery for this where upvotes and downvotes are counted based on the post id

SELECT p.*,
       ( select count(*)  from up where post_id = p.post_id ) as upVotesCount,
       ( select count(*)  from down where post_id = p.post_id ) as downVotesCount,
 FROM posts p

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM