【发布时间】:2021-11-08 13:33:24
【问题描述】:
我想创建一个函数来生成随机排名。我有一个成员表调用t1_user,当我的第二个表t2_rank 为空时,我想从t1_user 调用ORDER BY RAND()。
我的t1_user 表有 5400 行数据,所以我想像每 500 行数据一样拆分数据然后REPLACE INTO。我正在使用Discuz! 模板语言。
我的t1_user 数据(5400 条记录+,无重复)
+--------------------+
| id | name |
+--------------------+
| 1 | abc |
| 2 | hahaha |
| 3-999..... |
| 1000 | abcdef |
| 1001 | ohyeah |
| 1002 | nci |
----------------------
在我运行我的代码后,会将以下数据插入到我的t2_rank 表中
+---------+----------+--------+
| id | name | rank |
+-----------------------------+
| 1 | abc | 1 |
| 2 | hahaha | 2 |
| 1000 | abcdef | 1000 | //until here is fine
| 1001 | abc | 1001 | //wrong, will insert data of row1 and continue data of row2...
| 1002 | hahaha | 1002 |
+-----------------------------+
我目前的编码如下。
$checkfirst = DB::result_first("SELECT count(*) cnt FROM ".DB::table('t2_rank').""); //template language DB::
if($checkfirst == 0){
$s = DB::fetch_all("SELECT * FROM ".DB::table('t1_user')." ORDER BY RAND();");
$x = 1;
foreach($s as $su){
$newdata[$x] = '('.$x.','.$id.')';
$x++;
}
$pagesplit = 500;//500 row split
$firstpage = 0;
$tpp = $pagesplit;
$runningtime = ceil(count($s)/$pagesplit);
for($y=1;$y<$runningtime;$y++){
$genewdata = array_slice($newdata, $firstpage, $tpp);
$tobeupdate = implode(',',$genewdata);
DB::query("REPLACE INTO ".DB::table('t2_rank')." (rank,id) VALUES ".$tobeupdate."");
$firstpage = $firstpage+$pagesplit;
$tpp = $tpp+$pagesplit;
if($tpp >= count($s)){
$tpp = count($s);
}
}
}
我可以知道我的代码有什么问题吗?谢谢。
【问题讨论】: