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