我有一个MySQL表,其中的列包括id,人名和随机数。我想做的是每周,将名字收集成5个随机组。这是5场比赛的足球锦标赛现在已经变得太大而无法手动完成,我希望它是自动的。
我认为它的工作方式是获取num_rows,除以5得到组的总数($ divide)。然后创建一个循环,随机选择5行,并给出1和$ divide之间的随机数。它必须每周更换,因此它不能是一次性的任务。我也希望它适应num_rows不完全除以5的情况,并创建剩余数字的最后一组。
就我而言 -
$num_rows = mysql_num_rows($data);
$divide = $num_rows / 5;
$rannum = RAND (1, $divide);
$sql = mysql_query("UPDATE allpeep SET rannumber = $rannum")
or die(mysql_error());
但正如您可能已经猜到的那样,这只是在所有行中插入相同的随机数。我认为这需要一个while循环,但我无法弄清楚它是如何工作的。
答案 0 :(得分:0)
SELECT * FROM TABLE ORDER BY RAND() LIMIT 5
但如果进行多次查询,这仍然无法防止重复,所以...
SELECT * FROM TABLE ORDER BY RAND()
获取整套,然后在服务器脚本中解析为5。我假设您希望这些静态到下周,所以对于每个5集更新,sql server告诉他们什么' group'他们是在这个星期。
在替代方案中,如果为rand()函数使用种子,则可以使用以前的语法。使用年份/星期组合将为您提供可重复的兰特序列
SELECT * FROM TABLE ORDER BY RAND(YEARWEEK(CURDATE()))
然后您可以避免在服务器上更新任何内容,只需输出结果
$result = mysql_query("SELECT * FROM {tablename} ORDER BY RAND(YEARWEEK(CURDATE()))")
or die(mysql_error());
$group = 1;
$row = true;
while ($row) {
echo "Group $group";
for ($i=0; $group++, $i<5 && $row=mysql_fetch_assoc($result); $i++) {
// output current row
echo "team $row['team']";
}
}
答案 1 :(得分:0)
这是一个应该帮助你的类似线程。 Assign a Unique Random Number to Each Row
如果设置脚本来运行此查询,则可以随时使用cronjob运行它。