好的,我有一张桌子,有20个名为q1, q2, q3 all the way to q20
这些字段包含答案,这是10个数字。
我想基本上随机选择10个问题,并做一些数学和php在页面上显示。
这是我到目前为止所做的:
$selector = "10218";
/* Work out how many rows to divide by */
$nr = mysql_query("SELECT * FROM `reviews` WHERE `selector` = '" . $selector . "'");
$nr = mysql_num_rows($nr);
/* Get the total sum of answers for question 1 */
$q1 = mysql_query("SELECT sum(`q1`) AS `sum` FROM `reviews` WHERE `selector` = '" . $selector. "'");
$q1 = mysql_fetch_array($q1);
$q1 = $q1['sum'] / $nr;
echo "q1 avg is " . round($q1);
基本上,我们希望随机提供10个问题。
我们不想写出这个代码20次,因为它非常费劲,我们想做一些“数组”来包含问题,然后为每个循环循环10次随机问题?
我们希望最终得到:
q1 avg is 8
q2 avg is 4
q9 avg is 7
q4 avg is 8
q14 avg is 4
q18 avg is 6
q12 avg is 3
q7 avg is 10
q20 avg is 8
q13 avg is 9
我们怎样才能做到这一点?如果您不理解,请告诉我,我会尝试改写它。
答案 0 :(得分:0)
我不认为你要做的事情非常明确。
我认为您可以获得如下平均响应:
SELECT AVG(q1) FROM `reviews` WHERE `selector` = $selector;
正如上面的评论中所建议的那样,使用如下所示的数据库可能会更好:
create table reviews (
selector ???,
question integer not null, /* e.g. 1, 2, 3, up to 20 */
answer integer not null);
然后你可以做类似
的事情SELECT question, avg(answer)
FROM reviews
WHERE selector = $selector
GROUP BY selector
ORDER BY rand()
LIMIT 10;
虽然我不确定'选择器'的作用,并怀疑它是假的。
答案 1 :(得分:0)
这个怎么样:
// ...
$query = 'SELECT';
for ( $i = 1; $i <= 20; $i ++ ) {
$query .= ' SUM(`q' . $i . '`) AS `sum' . $i . '`';
}
$query .= 'FROM `reviews` WHERE `selector` = "' . $selector . '"';
$q1 = mysql_query( $query );
$q1 = mysql_fetch_array( $q1 );
foreach ( array_rand( $q1, 10 ) as $col => $sum ) {
echo $col . ' is ' . $sum . '<br />';
}
顺便说一句,总和不是平均值:)