php - MySQL SELECT 3 随机和一个静态行

标签 php mysql

我有一张多项选择题的答案表。所以你有三列

ID 正确并回答。 ID 是自动递增的。正确是 0 或 1。0 表示错误答案,1 表示相反(正确答案)。

我需要以随机顺序选择 4 行(或者只是能够以随机顺序调用它们)3 行必须不正确,第 4 行必须正确。

这在单个查询中可能吗?

最佳答案

如果 answers 表中的行数相当少,那么您可以这样做

SELECT id, question_id, correct, answer
  FROM answers
 WHERE question_id = 1 
   AND correct = 1
UNION ALL
(
  SELECT id, question_id, correct, answer
    FROM answers
   WHERE question_id = 1 
     AND correct = 0
   ORDER BY RAND()
   LIMIT 3
)
 ORDER BY RAND()

注意: ORDER BY 中的 RAND() 是一个非常昂贵的操作

示例输出:

| ID | QUESTION_ID | CORRECT |   ANSWER |
|----|-------------|---------|----------|
|  7 |           1 |       0 |  answer7 |
| 10 |           1 |       0 | answer10 |
|  5 |           1 |       1 |  answer5 |
|  4 |           1 |       0 |  answer4 |

这是 SQLFiddle 演示

关于php - MySQL SELECT 3 随机和一个静态行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22411764/

相关文章:

mysql - 使用 GROUP BY 获取单个值 - MySQL

php - 获取上个月的记录

mysql - symfony 学说自动增量迁移插入列数不匹配

php - 在 Mysql UNION SELECT $stmt 之后..我从多个表中获取了数据

javascript - 在类中显示 purejs 中的前 2 个字符并隐藏其余字符

java - 前端架构

java - 如何编写提示运行时使用 DEFAULT 值的 JPA QL 语句?

php - 使用 PHP 连接到数据库时出错

php - UPDATE Multiple ID 中的 PDO 准备语句

mysql 按汇总列分组