繁体   English   中英

php/mysql 中的嵌套查询

[英]nested query in php/mysql

我是 PHP/mysql 的新手,我将它们用作 flutter 应用程序的后端。 我有 4 个表 post,user,likes,comments 并希望通过名为 category_name 的帖子属性过滤帖子的数据以及相关的喜欢和评论以及帖子所有者数据(用户),其值通过变量传递称为“过滤器”

我尝试了如下嵌套查询:

 <?php
$filter = "PMS";

if($filter=="All"){
   $sql= "SELECT users.*,post.*,COUNT(likes.user_id) as qty 
    ,COUNT(comments.Comment_owner_id) as comments FROM 
     likes JOIN post ON likes.post_id=post.id JOIN users ON 
     users.id=post.user_id JOIN comments ON 
     post.id=comments.post_id 
      GROUP BY post.id";

 }else{
   $sql= "SELECT test.* FROM (SELECT users.*,post.* 
    ,COUNT(likes.user_id) as qty ,COUNT(comments.Comment_owner_id) 
      as comments FROM post ->
    JOIN likes ON likes.post_id=post.id JOIN users ON 
    users.id=post.user_id JOIN comments ON post.id=comments.post_id   
    AS test GROUP BY post.id) WHERE test.category_name='$filter'";

   //execute the query

  $res= mysqli_query($conn,$sql);

   //convert it to an list

  $posts = mysqli_fetch_all($res,MYSQLI_ASSOC);
  if($posts){
    echo json_encode($posts);
  }else{
   echo "error";
  }


   ?>

但它在我收到以下消息的地方不起作用

 Fatal error: Uncaught TypeError: mysqli_fetch_all(): Argument #1 ($result) must be of type mysqli_result, bool given in C:\xampp2\htdocs\blog\data\postAll.php:32 Stack trace: #0 C:\xampp2\htdocs\blog\data\postAll.php(32): mysqli_fetch_all(false, 1) #1 {main} thrown in C:\xampp2\htdocs\blog\data\postAll.php on line 32

,你有什么建议吗?

我发现解决方案可能如此简单

$sql="SELECT post.*,users.*,COUNT(likes.user_id) AS likes from post JOIN  users ON post.user_id=users.id LEFT JOIN likes ON post.id=likes.post_id WHERE post.category_name = '$filter' GROUP BY post.id";

它对我来说效果很好。

if you are laravel developer you can use laravel package https://github.com/lazychaser/laravel-nestedset

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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