[英]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.