【问题标题】:Prevent creating duplicate entries in PHP防止在 PHP 中创建重复条目
【发布时间】:2015-02-13 12:37:54
【问题描述】:

我想随机创建一些用户 ID,但不应重复/重复。

如果我的目标是将其插入到 MySQL 数据库中,我想问是否有一般的好方法?我不想创建新用户。它用于另一张桌子。

我想插入具有随机用户 ID 的随机数据来创建用户所做的测试评论条目,但我不想显示不同的用户。这就是我需要它的原因。这与使用主用户表中的主键自动递增无关。我要填写评论区

例子:

user_id: 54,34,30 用 PHP 随机生成(mt_rand() 函数)。现在我有大约 1000 个用户想要随机化,但仍有可能在某个时候重复。所以现在让我们说这些是值:54,54,32

这意味着它将在进一步的步骤中插入相同的用户 twiche,其中我在评论表中 INSERT 这个用户 ID。 所以我只需要另一个随机生成的数字如果它已经生成了。

【问题讨论】:

  • Uuuuhhhm 没有。太糟糕了。只需使用自动增量字段。为什么无论如何都需要随机化?此外,如果您真的想要随机的东西,还有很多更好的方法。
  • 不,这与添加新用户无关。我想为另一个表随机生成用户 ID,但不是两次为特定用户生成用户 ID。 @PeeHaa
  • 您可以尝试使用来自唯一字段(如用户名)的哈希。
  • 但是我必须先从数据库中获取数据。我只想生成一个不会在循环中再次重复的数字。这就是我所需要的。
  • 为什么要为另一个表生成随机ID?

标签: php mysql arrays while-loop


【解决方案1】:

最好的方法是创建一个 GUID,而不是一个整数。 PHP 具有创建这些独特代码的内置方法。

如果您要插入数据库,我认为最可靠的方法是创建一个主键,然后一次插入一个条目。由于如果您尝试插入重复 ID,DB 调用将出错,因此这是检查错误并在需要时选择不同 ID 的合适位置 - 尽管如果您使用 GUID,重复的机会已经可以忽略不计。

编辑:

因此,如果我理解您正在尝试正确执行的操作,您希望创建一个用户 ID 的随机数组,这些用户 ID 是 1-1000 之间的整数,其中没有两个 ID 重复。

我假设性能不是一个大问题,因为这听起来像是测试/虚拟数据。因此,在我看来,最简单的方法是避免在每次创建 id 时都测试现有 id,而只需打乱你的数组。

因此,您从一个包含 1000 个 id 的数组开始,然后循环 x 次,对数组进行洗牌,并从数组的开头切出随机数量的 id。这是我测试过的一些代码。它会输出我认为您想要创建的内容。

$ids = array();
$commentIds = array();
$numIds = 1000;
$numComments = 10;
for($i=0; $i<$numIds; $i++)
{
    $ids[$i] = $i;
}
for($s=0; $s<$numComments; $s++)
{
    shuffle($ids);
    $num = mt_rand(1,10);
    echo("rand:$num");
    $commentIds[$s] = array_slice($ids,0,$num);
    print_r($commentIds[$s]);
}

你是这个意思吗?

【讨论】:

  • 我没有足够的分数来评论你原来的问题,但是如果你展示一个你希望最终数组如何结束的例子,每个人都会更容易回答......你的意思是 [1,4,657,34,12,32] 还是你的意思是 [1,3,4,2,5,7,6,8,9] 如果数组需要引用一行另一个表,还是他们需要引用另一个表中的实际 id?
  • 我再次编辑了我的问题并发布了一个示例。也许这有助于更好地理解它?
【解决方案2】:

如果您要添加特定数量的用户,请尝试增加一个数字并将其用作用户名。这样,它们都是独一无二的,你不必在 30 秒后强行杀死它。这应该是最简单的方法,除非您实际上需要随机(非顺序)ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2015-11-29
    • 1970-01-01
    相关资源
    最近更新 更多