我有2个表5r63P4FZ_users
和5r63P4FZ_2_learndash_user_activity
,在此表5r63P4FZ_2_learndash_user_activity
中,所有课程的状态都将显示在这里,这里有ID
36位用户,已分配2门课程,其activity_id
是105
和19
,用户ID
= 36
的这2门课程,我只想计算该用户课程完成意味着其activity_status
= 1
,但是现在在我的表格中,其状态分别为1
和0
,这意味着用户没有完成这两个课程,因此我想将该用户计为0,为此我添加了查询,但是它给了我1而不是0,有人可以帮我解决此问题,这是我的表和查询
5r63P4FZ_users
5r63P4FZ_2_learndash_user_activity
Query :
SELECT COUNT(DISTINCT u.ID) as total
FROM 5r63P4FZ_users AS u
INNER JOIN 5r63P4FZ_2_learndash_user_activity as ua
ON u.ID = ua.user_id AND ua.activity_status = "1" AND ua.activity_type = 'course'
WHERE u.ID = 36
答案 0 :(得分:0)
SELECT COUNT(*) FROM (
SELECT DISTINCT 5r63P4FZ_users.user_id FROM
5r63P4FZ_users INNER JOIN 5r63P4FZ_2_learndash_user_activity
ON 5r63P4FZ_users.user_id = 5r63P4FZ_2_learndash_user_activity.user_id
AND activity_status = 1 and activity_type = 'course'
WHERE 5r63P4FZ_users.user_id NOT IN (
SELECT DISTINCT user_id FROM 5r63P4FZ_2_learndash_user_activity
WHERE activity_status = 0 and activity_type = 'course'
)
)
;
答案 1 :(得分:0)
mysql> select * from tab;
+------+------+------+
| uid | cid | act |
+------+------+------+
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 1 | 2 | 0 |
| 3 | 2 | 1 |
| 3 | 1 | 1 |
+------+------+------+
5 rows in set (0.00 sec)
mysql> select uid, min(act) from tab group by uid having min(act) > 0;
+------+----------+
| uid | min(act) |
+------+----------+
| 2 | 1 |
| 3 | 1 |
+------+----------+
2 rows in set (0.00 sec)
uid-用户ID,CID-课程ID,操作-活动
答案 2 :(得分:0)
您不需要加入两个表。
您想要的所有数据都存在于表5r63P4FZ_2_learndash_user_activity
中。
此查询:
select user_id
from 5r63P4FZ_2_learndash_user_activity
where activity_type = 'course'
group by user_id
having sum(activity_status) = count(*)
返回已完成所有课程的所有user_id
位用户。
如果您只想计算它们:
select count(*) counter from (
select user_id
from 5r63P4FZ_2_learndash_user_activity
where activity_type = 'course'
group by user_id
having sum(activity_status) = count(*)
) t
如果您仅对user_id = 36
感兴趣,则可以在上述查询中添加WHERE子句:
where t.user_id = 36
或者您可以使用此:
select
case
when exists (
select 1 from 5r63P4FZ_2_learndash_user_activity
where user_id = 36 and activity_type = 'course' and activity_status = 0
) then 0
else 1
end counter
假设user_id = 36
至少有1门课程。