gpt4 book ai didi

php - MySQL:对多列应用随机排序

转载 作者:行者123 更新时间:2023-11-29 07:13:23 25 4
gpt4 key购买 nike

为了得到一个经过良好打乱的表格(用于心理实验),我想通过 RAND() 对数组的每一列进行排序。这段代码始终有效:

SELECT Sort.Variable1, Sort.Variable2 FROM Sort ORDER BY Variable1, Variable2 ASC LIMIT 0 , 30

用“RAND()”替换“ASC”会使查询失败。有人可以给我一个建议(甚至是 PHP 的解决方案)吗?

谢谢

编辑:

感谢大家的回复,我终于做到了。这是我的 PHP 代码(对于老式的非全新 PDO 查询,我深表歉意)。即使它可能没用,我也会发布它:

           $i=0;
//Describe to retrieve variables' names
$sqlCol= 'DESCRIBE Sort';
$sqlCol= mysql_query($sqlCol);
while ($res=mysql_fetch_array($sqlCol)) {
$var[$i]=$res['Field'];
$i++;
}
$NbCol=mysql_num_rows($sqlCol); //Number of column to shuffle


// Number of items for each column
$sqlCount= 'SELECT COUNT(*) FROM Sort';
$req2= mysql_query($sqlCount) or die ('Err');
$NbLignes= mysql_result($req2,0,0) or die ();//Number of rows


//Data array
$sql= "SELECT * FROM Sort";
$req= mysql_query($sql) or die ('Err');
$sort=mysql_fetch_array($req);
for($i=0;$i<$NbCol;$i++) {
${'sql'.$i}='SELECT * FROM Sort ORDER BY RAND()';
${'input'.$i} = mysql_query(${'sql'.$i});
while(${'array'.$i}=mysql_fetch_array(${'input'.$i})) {
$bigArray[$i][]=${'array'.$i}[$i];
}
}

for($i=0;$i<$NbLignes;$i++) {
echo '<div id="q'.$i.'"style="margin-bottom: 50px; float:left">Question '.($i+1);
echo '<ul id="sortable'.$i.'" class="sortable">';
for($j=0;$j<$NbCol;$j++) {
echo '<li class="ui-state-default" id="'.$var[$j].$i.'" name="'.$var[$j].$i.'">'. $bigArray[$j][$i].'</li>';

}
echo '</ul></div>';
}

最佳答案

使用 ORDER BY RAND() 不会随机化列 - 它会随机化行。

要在 SQL 中分别随机化每一列,您可以:

  • 分别为每一列创建一个结果集
  • 随机排列每一个的顺序
  • 按行号连接列

不幸的是,MySQL 开发团队尚未实现 ROW_NUMBER,这将使这项任务变得容易,但您可以通过使用变量模拟 ROW_NUMBER 来解决它:

SELECT
Column1,
Column2
FROM
(
SELECT Column1, @rn1 := @rn1 + 1 AS rank
FROM Table1, (SELECT @rn1 := 0) vars
) T1
JOIN
(
SELECT Column2, @rn2 := @rn2 + 1 AS rank
FROM Table1, (SELECT @rn2 := 0) vars
ORDER BY RAND()
) T2
ON T1.rank = T2.rank

关于php - MySQL:对多列应用随机排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3091487/

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