我有三个表:用户,问题和操作。这些数据用于处理在教程网站上回答问题的用户。一旦他们回答了足够的问题,他们就会转到一个新的问题部分。他们不断地以随机的顺序向未答复的问题池提出问题,直到他们完成所有问题为止。
如果用户没有得到足够的问题,并且该数据库中针对该特定部分的问题用完了,我的代码需要循环回来并以随机顺序再次给出所有部分问题
直到那时我才使用此查询,
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
这通常就是我所追求的。
所以问题,