mysql查询& php - 如何实现这一目标?

时间:2011-08-23 05:03:04

标签: php

好的,我有一张桌子,有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

我们怎样才能做到这一点?如果您不理解,请告诉我,我会尝试改写它。

2 个答案:

答案 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 />';
}

顺便说一句,总和不是平均值:)