php - 检查大量值在数据库中的唯一性

标签 php mysql database optimization

我需要创建长度应该较短(~ 6 个字符)的促销代码。促销代码必须是唯一的,因此我还需要检查它们在数据库中的唯一性。它们需要成批生成数千个,因此在每次生成优惠券时都检查数据库是不可行的。我创建了一个方法,它首先生成所需数量的优惠券,然后使用 where in() 检查重复项。重复计数大于零,使其再次生成计数。

public function generateCoupons($count, $length = 6)
{
    $coupons = [];
    while(count($coupons) < $count) {
        do {
            $coupon = strtoupper(str_random($length));
        } while (in_array($coupon, $coupons));
        $coupons[] = $coupon;
    }

    $existing = Offer::whereIn('coupon', $coupons)->count();
    if ($existing > 0)
        $coupons += $this->generateCoupons($existing, $length);

    return (count($coupons) == 1) ? $coupons[0] : $coupons;
}

需要如何改进的建议?或者,如果我可以通过其他方式实现相同的目标。

最佳答案

确保促销代码已在您的数据库中编入索引。这将加快搜索现有促销代码的速度。

否则,你的方法不错!你想一次检查尽可能多的代码(你用 whereIn/count 来做)并且只重新生成不唯一的代码。

关于php - 检查大量值在数据库中的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34254294/

相关文章:

MySQL,存储大量记录

php - 想要创建一个脚本来备份整个数据库并下载它

php - MYSQL 在不同的表中插入相同的值 PHP

php - 使用php的Mysql事件错误

mysql - mysql 客户端中的命令历史记录仅显示多行查询的最后一行

javascript - 使用 NodeJS 将 JSON 插入 MySQL JSON 列格式

如果刷新页面,mySql 连接不会关闭

database - 没有非规范化的 NOSQL 设计?

php - 如何每 30 天从我的 MySQL 数据库中随机显示一行?

php - 在 PHP 中回显一个表的总和