猿问

如果没有符合条件的行在第二个表中计数,如何显示一个表中的所有行

我有两张桌子。“members”是所有成员的列表,“stats”是工作日期的列表。共享字段是 memberID。我需要一个每个人工作天数的 COUNT,我希望每个人都列在输出表中,即使他们还没有工作日。


简化的数据库结构是:


**members**                 **stats**       

memberID lname    fname     memberID    date    statsID

1        Mertz    Fred      1        2017-12-31    1

2        Doe      Jane      3        2017-12-31    2

3        Smith    Frank     4        2017-12-31    3

4        Ricardo  Lucy      2        2018-12-31    4

5        Starr    Ringo     4        2018-12-31    5

                            2        2019-05-05    6

                            3        2019-05-05    7

所需的输出是:


memberID  lname  fname  Total Days 

2         Doe    Jane       2 

1         Mertz  Fred       1 

4         Ricardo Lucy      2 

3         Smith   Frank     2 

5         Starr   Ringo     0 OR blank

Ringo 还没有工作几天,也没有出现在输出表中。


我的代码是:


$sql = "SELECT  u.*,

   COUNT(s.memberID)as tot_days

   FROM members u

   LEFT JOIN stats s

    ON s.memberID = u.memberID 

    GROUP BY s.memberID

    ORDER BY lname,fname";


$members = mysqli_query($dbc,$sql) or die(mysqli_error());


while ($row = mysqli_fetch_array($members)){ 

        $row = array_map('htmlspecialchars', $row);

        echo <<< HTML  etc.

这完成了我想要它做的所有事情,除了那些还没有工作一天的成员。JOIN、LEFT JOIN、LEFT OUTER JOIN、RIGHT JOIN、RIGHT OUTER JOIN 都产生相同的结果。我尝试了 LEFT 和 RIGHT INNER JOIN,如果它们存在的话,就会产生错误Warning: mysqli_error() expects exactly 1 parameter, 0 given。


有人建议使用,COALESCE (COUNT(s.memberID),0) as tot_days但这只会产生与上述相同的错误。


我已经在这里待了好几天了,我感到有点沮丧!


素胚勾勒不出你
浏览 117回答 2
2回答

守候你守候我

SELECT u.*&nbsp; &nbsp; &nbsp;, COUNT(DISTINCT s.date) tot_days&nbsp; FROM members u&nbsp; LEFT&nbsp;&nbsp; JOIN stats s&nbsp; &nbsp; ON s.memberID = u.memberID&nbsp;GROUP&nbsp;&nbsp; &nbsp; BY u.memberID&nbsp;ORDER&nbsp;&nbsp; &nbsp; BY u.lname&nbsp; &nbsp; &nbsp;, u.fname
随时随地看视频慕课网APP
我要回答