【问题标题】:How to Use Random or Suffle Data on MySQL using PHP?如何使用 PHP 在 MySQL 上使用随机或随机数据?
【发布时间】: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


【解决方案1】:

从数据库中获取所有内容并将其保存到 PHP 数组中,然后应用其中一个随机化 PHP 函数。 Shuffle 更改了键,所以我在 PHP.net 网站上看到了 someone who posted a nice function,它保留了索引:

<?php
    function shuffle_assoc(&$array) {
        $keys = array_keys($array);

        shuffle($keys);

        foreach($keys as $key) {
            $new[$key] = $array[$key];
        }

        $array = $new;

        return true;
    }
?>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2013-01-25
相关资源
最近更新 更多