0

数据库如下:

Class_Memberships[id,user_id,class_id]
Class_Challenges[id,challenge_id,class_id]
Challenge_attempts[id,user_id,challenge_id,timestamp,solved]

我需要计算分数,即用户完成挑战所需的尝试次数。

要在全局范围内执行此操作(不考虑类),我运行以下命令

SELECT user_id, time, count(*) as count, users.username
            FROM challenge_attempts LEFT JOIN users ON
            users.id = user_id WHERE status = 1 

哪个可以完成工作并且似乎没有任何错误

我试图限制仅属于特定类别的用户和挑战的结果。因此我的查询变成了这个

SELECT class_memberships.class_id, user_id, count(*) as count
FROM class_memberships,users,class_challenges
WHERE class_memberships.class_id = 4 AND
      users.id = user_id AND
  user_id IN (
    SELECT user_id
    FROM challenge_attempts LEFT JOIN users ON
    users.id = user_id WHERE status = 1)
  AND class_challenges.challenge_id IN(
        SELECT challenge_id FROM class_challenges
    WHERE class_challenges.class_id = 4
    )

SELECT class_memberships.class_id, user_id, count(*) as count
FROM class_memberships,users,class_challenges
WHERE class_memberships.class_id = 4 AND
      users.id = class_memberships.user_id

部分应该让用户上课

SELECT user_id
    FROM challenge_attempts LEFT JOIN users ON
    users.id = user_id WHERE status = 1

应该得到他们的分数

最后是

SELECT challenge_id FROM class_challenges
    WHERE class_challenges.class_id = 4

应该将分数限制为属于班级的挑战。但是当我尝试运行它时,字段列表中的 sql 输出列 'class_id' 不明确

我在这里想念什么?

4

1 回答 1

0

不太确定您想要使用 COUNT() 做什么,但如果它不能解决您的问题,请告诉我。

SELECT t1.class_id, t1.user_id, count(t3.id) as count
FROM class_memberships t1
INNER JOIN users t2 ON (t2.id = t1.user_id)
INNER JOIN class_challenges t3 ON (t3.class_id = t1.class_id)
WHERE t1.class_id = 4 
    AND t1.user_id IN (
        SELECT t4.user_id
        FROM challenge_attempts t4
        LEFT JOIN users ON users.id = t4.user_id 
        WHERE status = 1
    )
GROUP BY t1.user_id, t1.class_id
于 2013-04-26T02:53:53.950 回答