计算来自多个表的数据

时间:2013-02-07 04:49:40

标签: mysql sql

我有三个表:用户,问题和操作。这些数据用于处理在教程网站上回答问题的用户。一旦他们回答了足够的问题,他们就会转到一个新的问题部分。他们不断地以随机的顺序向未答复的问题池提出问题,直到他们完成所有问题为止。

如果用户没有得到足够的问题,并且该数据库中针对该特定部分的问题用完了,我的代码需要循环回来并以随机顺序再次给出所有部分问题

直到那时我才使用此查询,

    SELECT action_int
    FROM actions
    WHERE user_id = '".$this->id."'
    AND action_type = 'given_question'
    AND action_details = 'weekly'
    AND action_int IN (
        SELECT action_int
        FROM actions
        WHERE user_id = '".$this->id."'
        AND action_type = 'answered_question'
        )
    AND action_int IN (
        SELECT id
        FROM questions
        WHERE section_id = '".$this->current_section."'
        )

action_int是存储在操作表中的问题ID。这将在用户当前部分返回所有已回答的问题,但如果代码已经回绕,则不会重复。

所以,我解决这个问题的第一种方法是,我想查询数据库,以便我找出用户已回答的每个问题,计算他回答了这个独特问题的次数(如果他们已经绕过了所有的问题)之前的问题),并从计数最小的值(MIN())中随机选择一个问题ID。

我一直在努力,

SELECT q.id, a.count
FROM questions q

LEFT JOIN (
SELECT
    action_int AS id, count(action_int) AS 'count'
FROM
    actions
WHERE
    action_type = 'answered_question'
GROUP BY action_int) a
ON  a.id = q.id

返回,

id  count

14  2
16  3
17  3
11  null
13  null
15  null
18  1
12  1
19  null

这通常就是我所追求的。

所以问题,

  1. 有更好的方法吗?也许是这样,如果一个问题没有 已经回答但它为计数返回0而不是null?
  2. 如果我只想计算用户当前部分中的已回答问题(存储在诸如section_id和用户作为current_section的问题中),如何从部分编号返回仅包含问题[id,count]的列?

0 个答案:

没有答案