gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:00:11 25 4
gpt4 key购买 nike

我有两张 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com