gpt4 book ai didi

php - 如何确保随机选择的两行彼此不同?

转载 作者:行者123 更新时间:2023-11-29 12:14:08 25 4
gpt4 key购买 nike

我问了这个问题yesterday并收到了一个简单的解决方案,但它是关于 ORDER BY rand() 的,我被告知这对于大型表来说效率低下。我在网上搜索了一下,发现这是一个更有效的方法:

  1. 获取表中的总行数:$rows
  2. 使用 mt_rand$row1_id 设置为 1 到总行数之间的随机数:$row1_id = mt_rand(1,$rows)
  3. 再次使用 mt_rand$row2_id 设置为 1 到总行数之间的随机数:$row2_id = mt_rand(1,$rows)
  4. 运行查询以选择随机行,即

mysqli_query($conn,"从照片中选择 * WHERE photo_id=$row1_id")mysqli_query($conn,"从照片中选择 * WHERE photo_id=$row2_id")

但是,我需要确保 $row1_id != $row2_id (随机生成的数字必须彼此不同)。我尝试使用 if 语句,但它只是减少了数字相同的机会,但它仍然是可能的。

有什么简单的解决方案吗?

最佳答案

只需在循环内生成第二个随机数,以确保它不等于第一个随机数。这个循环很可能只会执行一次。

$num1 = mt_rand(...);
$num2 = 0;

do {
$num2 = mt_rand(...);
} while($num2 == $num1);

// $num1 and $num2 are guaranteed to be different

只要您的行 ID 是连续且没有间隙的,此方法就适合您

如果存在差距,您将需要生成新的数字,直到两者都导致数据库命中。像这样的东西。

$photo1 = null;
$photo2 = null;

do {
$num = mt_rand(...);
$photo1 = mysql_query(...);
} while(mysqli_num_rows($photo1) == 0);

$photo1 = mysqli_fetch_assoc($photo1);

do {
$num = 0;
do {
$num = mt_rand(...);
} while($num == $photo1['id']);
$photo2 = mysql_query(...);
} while(mysqli_num_rows($photo2) == 0);

$photo2 = mysqli_fetch_assoc($photo2);]

您可以将这些方法与 order by rand() 选项进行比较,看看哪种方法性能更高。

关于php - 如何确保随机选择的两行彼此不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30136457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com