通过使用php将随机数插入mysql表,将条目分组为5个随机组

时间:2014-12-02 20:35:05

标签: php mysql random

我有一个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循环,但我无法弄清楚它是如何工作的。

2 个答案:

答案 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运行它。