gpt4 book ai didi

php - 是否可以在一行中选择随机列?

转载 作者:IT老高 更新时间:2023-10-29 00:15:19 26 4
gpt4 key购买 nike

例如,我有 1 个问题和 5 个答案。

问题:

5+5=?

Answer:

a. 3
b. 4
c. 5
d. 9
e. 10

这是数据库中的示例数据

id  |  question  |  ans1  |  asn2  |  ans3  | ans4  |  correctAns  |
1 | 5+5 | 3 | 4 | 5 | 9 | 10 |

我想随机化 ans1、ans2、ans3、ans4 和正确Ans 的输出。

有可能吗?如果是请指导我..谢谢

最佳答案

结构说明

虽然这个问题可能很有趣,但带有问题答案和提供结构的用例确实很糟糕。那是因为你被限制在一定数量的答案上。这意味着:

  • 所有问题都必须有所有答案。如果某个问题应该只有 2 个答案可供选择,那么 - 是的,会有 N-2 个 NULL 值(这里 N 表示答案的数量,以防 N=4)
  • 如果只有 一个 问题必须有超过 N 个答案 - 那么,是的,ALTER 等待。这将为所有其他问题产生更多的 NULL-s。

我建议改变你的结构。使用父问题表的外键将答案存储在单独的表中。这已经足够了(此外,关于随机选择的问题会更容易解决)

问题解决方案

但是,处理涉及表结构的问题可能很有趣——在 MySQL 中,此类问题通常通过 INFORMATION_SCHEMA 元数据解决。要仅使用 SQL 解决问题,您需要使用 prepared statements .这是示例表:

mysql> SELECT * FROM test;+------+----------+------+------+------+------+------------+| id   | question | ans1 | ans2 | ans3 | ans4 | correctAns |+------+----------+------+------+------+------+------------+|    1 | 5+5      |    3 |    4 |    5 |    9 |         10 |+------+----------+------+------+------+------+------------+1 row in set (0.00 sec)

Now, I assume columns id and question as to be included always in first and second place to result. Other columns should be randomized. To do this, you can use INFORMATION_SCHEMA.COLUMNS table:

SELECT 
CONCAT(
'SELECT id, question, ',
GROUP_CONCAT(COLUMN_NAME),
' FROM test') AS s
FROM
(SELECT
COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME='test'
AND
TABLE_SCHEMA='test'
AND
COLUMN_NAME NOT IN ('id', 'question')
ORDER BY RAND()) AS randCols;

如您所见,此 SQL 将生成另一个 SQL。结果会是这样的:

+---------------------------------------------------------------+| s                                                             |+---------------------------------------------------------------+| SELECT id, question, ans1,ans2,correctAns,ans4,ans3 FROM test |+---------------------------------------------------------------+1 row in set (0.00 sec)

所以你可以很容易地在准备好的语句中使用它。准备变量:

mysql> set @s=(SELECT CONCAT('SELECT id, question, ', GROUP_CONCAT(COLUMN_NAME), ' FROM test') AS s FROM (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='test' AND TABLE_SCHEMA='test' AND COLUMN_NAME NOT IN ('id', 'question') ORDER BY RAND()) AS randCols);Query OK, 0 rows affected (0.01 sec)

用它来声明:

mysql> prepare stmt from @s;Query OK, 0 rows affected (0.00 sec)Statement prepared

最后,执行它:

mysql> execute stmt;+------+----------+------------+------+------+------+------+| id   | question | correctAns | ans1 | ans2 | ans4 | ans3 |+------+----------+------------+------+------+------+------+|    1 | 5+5      |         10 |    3 |    4 |    9 |    5 |+------+----------+------------+------+------+------+------+1 row in set (0.00 sec)

关于php - 是否可以在一行中选择随机列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21874892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com