为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
素胚勾勒不出你 2021-06-30 18:41:52
我有两张桌子。“members”是所有成员的列表,“stats”是工作日期的列表。共享字段是 memberID。我需要一个每个人工作天数的 COUNT,我希望每个人都列在输出表中,即使他们还没有工作日。简化的数据库结构是:**members**                 **stats**       memberID lname    fname     memberID    date    statsID1        Mertz    Fred      1        2017-12-31    12        Doe      Jane      3        2017-12-31    23        Smith    Frank     4        2017-12-31    34        Ricardo  Lucy      2        2018-12-31    45        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 blankRingo 还没有工作几天,也没有出现在输出表中。我的代码是:$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但这只会产生与上述相同的错误。我已经在这里待了好几天了,我感到有点沮丧!
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

SELECT u.*

     , COUNT(DISTINCT s.date) tot_days

  FROM members u

  LEFT 

  JOIN stats s

    ON s.memberID = u.memberID

 GROUP 

    BY u.memberID

 ORDER 

    BY u.lname

     , u.fname


查看完整回答
反对 回复 2021-07-02
  • 2 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信