Mysql查询&如何做到这一点


mysql query & how to achieve this?

好的,我有一个表,有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

我们该怎么做呢?如果你不明白,请告诉我,我会试着重新表述。

这个怎么样:

// ...
$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 />';
}

顺便说一下,总和不是平均值

我认为你想做的不是很清楚。

我认为你可以得到如下的平均反应:

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;

虽然我不确定'选择器'的作用,并怀疑它是假的。

相关文章: