簡體   English   中英

無法合並三個 select 語句的結果

[英]Not able to merge results from the three select statements

嘿,看這里,我試圖立即從這三個 select 語句中獲得結果,但我無法做到。 所以請幫助我糾正我的錯誤。 如果您發現我的英語或提問方法不好,請不要給我負面評價。

 $sql = $conn->prepare("SELECT Count(c.c_id) from complaints c, users u,cell_num cn where c.status=? AND c.u_id_fk=u.u_id AND u.u_id=cn.u_id_fk");
 $sql->bind_param("i",$statOpen);

 $sql .= $conn->prepare("SELECT Count(c.c_id) from complaints c, users u,cell_num cn where c.status=? AND c.u_id_fk=u.u_id AND u.u_id=cn.u_id_fk");
 sql->bind_param("i",$statProgress);

 $sql .= $conn->prepare("SELECT Count(c.c_id) from complaints c, users u,cell_num cn where c.status=? AND c.u_id_fk=u.u_id AND u.u_id=cn.u_id_fk");
 $sql->bind_param("i",$statClosed);

                        $sql->execute();

                        $sql->store_result();

                        if($sql->num_rows > 0)
                        {
                            $sql->bind_result($c_id);

                            while( $sql->fetch() )
                            {
                                $user[] = array(
                               'c_id'=>$c_id


                             );
                            }
                            echo json_encode($user);


                            $sql->close();
                        }

您可以進行條件聚合:

select 
    sum(c.status = ?) cnt_open,
    sum(c.status = ?) cnt_progress,
    sum(c.status = ?) cnt_closed
from complaints c
inner join users u on u.u_id = c.u_id_fk
inner join cell_num cn on cn.u_id_fk = u.u_id

此查詢一次接受三個參數,它們對應於您傳遞給三個單獨查詢的三個值。

請注意,我修改了查詢以使用標准連接(使用on關鍵字)而不是老式的隱式連接(在from子句中使用逗號):這種古老的語法不應該在新代碼中使用。

您可以通過添加一個過濾三個可能statuswhere子句來提高查詢效率(這需要將每個參數傳遞兩次):

where c.status in (?, ?, ?)

你可以這樣做,它更優化

select c.statut,count(c.c_id)
from complaints c
inner join users u on u.u_id = c.u_id_fk
inner join cell_num cn on cn.u_id_fk = u.u_id
where c.status in (?, ?, ?)
group by c.status

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM