【发布时间】:2021-10-27 04:25:09
【问题描述】:
我正在做一个小测验。测验有 15 个问题,对于测验我需要 quiztype '1' 的 5 个问题,quizType '2' 的 5 个问题和 quizType '3' 的 5 个问题。现在我正在通过循环计算 quiztype '1' 和 quiztype '2',如果不满足循环外的条件,我会得到 15 个新条目并重复循环。我想知道,有没有更好的方法在我的查询中执行此操作而不是使用 2 个对象? 这是我的代码:
public function checkVariety($quizType, $data)
{
$i=0;
$i2=0;
foreach($quizType as $type) {
if ($type=='1') {
$i++;
}
if ($type=='2') {
$i2++;
}
}
if($i=='5' AND $i2=='5') {
$this->startQuiz($data);
return true;
} else {
$this->getRandom();
return false;
}
}
public function getRandom()
{
$stmt = $this->db->prepare("
SELECT id, quiz_type
FROM quiz
ORDER BY rand()
LIMIT 15
");
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$quizType[] = $row['quiz_type'];
$data[] = $row['id'];
}
$this->checkVariety($quizType, $data);
return true;
}
【问题讨论】:
-
我会使用 UNION 来获得三个查询的组合结果,这些查询分别选择五个 特定 quizType 的随机问题。
-
union 没听说过,我会研究一下,但它仍然会按随机顺序获取所有条目吗?还是先 5x quiztype=1,然后 5x quiztype=2,最后一个条目的 5x quiztype=3?
-
stackoverflow.com/questions/4715820/… 应该回答这个问题。
-
您使用的是什么版本的 MySQL?
SELECT version(); -
这是输出:10.4.20-MariaDB,我在 xampp 工作
标签: php mysql sql pdo prepared-statement