php - 如果第二个表中没有符合匹配条件的行进行计数,如何显示一个表中的所有行

标签 php mysql join count

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

简化的数据库结构是:

**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,如果它们存在的话,会产生错误警告:mysqli_error() 需要 1 个参数,给定 0 个

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

我已经这样做好几天了,只是有点沮丧!

最佳答案

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

关于php - 如果第二个表中没有符合匹配条件的行进行计数,如何显示一个表中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247193/

相关文章:

mysql - 使用不同条件查询同一个 SQL 表的多个实例

python - 联合超过 2 个 Pandas 数据框

php - header 重定向是否在不同的浏览器中产生不同的行为

PHP:require_once 和继承

php - CakePHP 3 Multiple isUnique 允许 NULL 重复

php - Php中查询字符串带有单引号字符串时如何获取记录

php - 类 - 构造函数中需要冲突

mysql - DataGridView 中的 List(Of T) 过载问题

php - 使用 jQuery、Ajax 和 PHP 进行登录检查

mysql - 简单的 JOIN 查询,但我不能复制结果,因为它们应该在 MySQL 中返回