【发布时间】:2011-03-06 17:03:12
【问题描述】:
为了有一个很好的打乱表(用于心理实验),我想按 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()不行吗? -
您还没有以稍微不同的方式问过这个问题吗? stackoverflow.com/questions/3075115/…
-
我不会否认你是真的;自 2 天以来,我已经尽一切可能用 PHP 来做到这一点(虽然,对于,shuffle()...),我已经查看了关于这个主题的每一篇文章,但我找不到令人满意的方法来让它工作.我很抱歉在另一个 shell 中再次发布这个问题,但这个问题真的让我发疯了,我想尽办法克服这个问题。