MySQL如何实现单列数据随机打散后与另一列匹配展示
实现方案
原有代码问题:遍历数据库记录时每次仅将当前行的answer存入数组,数组始终仅有1个元素,随机操作无效,无法实现单列打乱效果。
正确实现逻辑:
- 查询所有符合条件的记录,分别存储原始记录列表、所有answer值的列表
- 单独对answer列表做随机打乱
- 按原始顺序输出每条记录的图片,匹配对应位置打乱后的answer值
代码示例
// 采用预处理查询避免SQL注入风险 $stmt = mysqli_prepare($conn, "SELECT * FROM groupanswer WHERE id = ?"); mysqli_stmt_bind_param($stmt, "s", $nowid); mysqli_stmt_execute($stmt); $queryResult = mysqli_stmt_get_result($stmt); $originalRecords = []; $answerList = []; // 收集原始记录和所有答案 while ($row = mysqli_fetch_assoc($queryResult)) { $originalRecords[] = $row; $answerList[] = $row['answer']; } // 仅打乱答案列 shuffle($answerList); // 按原始顺序输出图片,匹配打乱后的答案 foreach ($originalRecords as $key => $record) { $currentAnswer = $answerList[$key]; $currentImage = $record['image']; // 此处可根据需求自定义输出格式 echo "{$currentAnswer} {$currentImage}<br>"; }
运行后即可实现原始图片顺序不变,answer列随机分配的效果,和你需要的test1匹配test2.jpg、test2匹配test1.jpg的场景要求一致。
内容的提问来源于stack exchange,提问作者pooya
相关产品推荐
相关产品推荐

