我正在尝试编写一个返回平均值数组的mysql查询。 我会解释一下:
从图中可以看出,我有一个网页,其中包含一个表格,其中包含问题为行,用户名为列。我们的想法是,您可以针对每个问题对每个用户进行评分。 提交时,它进入mysql表“评级”,每条记录包含用户ID,问题ID和值(1到10的评级)。 我想要做的是,我希望有一个管理员视图,而不是每个选择框,而不是每个选择框,它应该只为每个问题显示每个用户的平均值。
我可以在php中完成它,只需对此表中的每个单元格执行mysql查询,但这意味着需要进行大量查询。 我想要的是一个查询将返回一个二维数组,其中第一个维度键是用户ID,第二个维度是具有平均值的数组本身,键作为问题ID。
我甚至无法开始思考如何实现它。一个解决方案,或者甚至是对哪个方向的暗示,都将非常受欢迎!
CREATE TABLE IF NOT EXISTS `ratings` (
`rating_id` int(255) NOT NULL AUTO_INCREMENT,
`user_id` int(6) NOT NULL,
`question_id` int(6) NOT NULL,
`rating_value` int(2) NOT NULL,
PRIMARY KEY (`rating_id`),
KEY `user_id` (`user_id`,`question_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
答案 0 :(得分:1)
您无法直接从MySQL创建二维数组 - 但是,您可以在php中准备数据。
查询看起来有点像:
SELECT
user_id,
question_id,
AVG(rating_value) AS average_rating
FROM ratings
GROUP BY user_id, question_id
ORDER BY user_id
像这样你应该得到如下结果:
user_id | question_id | average_rating
1 | 1 | 2.4
1 | 2 | 4.1
1 | 3 | 3.0
2 | 1 | 1.0
2 | 2 | 7.9
等等。从这里开始,我想你可以用php解决问题。
答案 1 :(得分:0)
你需要为每个问题创建关系,然后加入每个关系,最后做一个GROUP BY,如下所示:
SELECT q1.userid, avg(q1.value) as q1avg, avg(q2.value) as q2avg,
avg(q3.value) as q3avg, avg(q4.value) as q4avg
FROM
(SELECT userid, questionid, value FROM ratings WHERE questionid=1) q1
JOIN
(SELECT userid, questionid, value FROM ratings WHERE questionid=2) q2
ON q1.userid = q2.userid
JOIN
(SELECT userid, questionid, value FROM ratings WHERE questionid=3) q3
ON q1.userid = q3.userid
JOIN
(SELECT userid, questionid, value FROM ratings WHERE questionid=4) q4
ON q1.userid = q4.userid
GROUP BY q1.userid
工作演示:http://sqlfiddle.com/#!2/fbc8a/2
它会以2D格式显示结果。