【发布时间】:2015-07-09 08:08:59
【问题描述】:
你好,我有这样的表:
员工
EmployeeID EmployeeName
1234 Suho
1235 Kai
1236 Baekhyun
1237 Lay
1238 D.O
1239 Chen
1240 Chanyeol
1241 Xiumin
1242 Sehun
我用这个源代码制作随机数据:
<?php
mysql_connect("localhost", "root", "1234") or die(mysql_error());
mysql_select_db("Employee") or die(mysql_error());
$employees = mysql_query("select p.*
from (select (@c := CHAR(ASCII(@c) + 1)) as c, EmployeeName
from Employee cross join
(select @c := 'A') params
order by EmployeeId
) p order by rand();")
or die(mysql_error());
$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$position = 0;
$position2 = 0;
$toomany = '';
while($row = mysql_fetch_array( $employees )) {
echo "<DIV>" . $toomany.substr($letters, $position, 1) . " = " . $row['EmployeeName'] . " </div>";
$position ++;
if($position > 25) {
$position = 0;
$position2 ++;
if($position2 > 25) { echo "We need to rethink this idea."; break; }
$toomany = substr($letters, $position2, 1);
}
}
?>
随机数据后,结果如下:
A = Sehun
B = Suho
C = Kai
D = D.O
E = Chen
F = Chanyeol
G = Baekhyun
F = Lay
H = Xiumin
或者像这样:
A = Kai
B = Suho
C = Sehun
D = D.O
E = Chen
F = Xiumin
G = Lay
F = Chanyeol
H = Baekhyun
问题是我想像这样随机数据(从之前的数据库中,EmployeeID 按字母顺序更改):
A = Suho
B = Kai
C = Baekhyun
D = Lay
E = D.O
F = Chen
G = Chanyeol
H = Xiumin
I = Sehun
进入这个,数据具有相同的值但具有不同的顺序(只有他们的药水改变,不仅他们的名字是随机的):
G = Chanyeol
C = Baekhyun
B = Kai
D = Lay
I = Sehun
E = D.O
F = Chen
A = Suho
H = Xiumin
或者像这样:
I = Sehun
E = D.O
C = Baekhyun
G = Chanyeol
B = Kai
H = Xiumin
D = Lay
F = Chen
A = Suho
你知道问题出在哪里吗?感谢您的帮助。
【问题讨论】:
-
你为什么不在 PHP 中洗牌?您可以将未洗牌的结果存储在关联数组中,使用字母作为键,名称(Sehun 等)作为值。对于简单的关联数组洗牌,请参阅此处的第一条评论:php.net/manual/en/function.shuffle.php
-
这应该如何处理超过 26 行?我看到你写了支持。例如 $letters 中只有 ABC,给出一个输出 7 行的例子。
-
请注意:不要在大型数据集上使用
ORDER BY RAND()。他们往往变得非常缓慢非常快。最好在php中选择一个随机范围并在php中随机化,而不是让MySQL来做......
标签: php mysql random xampp shuffle