سلام دوستان
من میخوام کاربران موقع ثبت نام یه کد عضویت عددی هم داشته باشن و توی تیبل کاربران ذخیره بشه
برای اینکار از کد زیر استفاده کردم:
public function generateApplicantId()
{
$candidatesData = User::pluck('applicant_id')->toArray();
do {
$applicant_id = random_int(1000000000, 9999999999);
} while (in_array($applicant_id, $candidatesData));
return $applicant_id;
}
ولی وقتی تعداد کاربران زیاد میشه زمان پردازشی زیادی رو میطلبه تا عمل بررسی یونیک بودن رو انجام بده
ضمنا نمیخوام ازتابع کمکی strpad استفاده کنم و id کاربر رو با تعدادی 0 پشت سرش قرار بدیم چون نیاز داریم عدد تولید شده بصورت افزایشی نباشه
میخواستم بدونم راهکار بهتری کسی سراغ داره ؟
خوب یک کوئری با چه حجمی از اطلاعات؟
یک کوئری که فقط یک ستون و یک ردیف را بررسی میکند
یا یک کوئری که اطلاعات یک ستون را واکشی میکند و وارد رم میکند تا پردازش in_array انجام شود.
همین موضوع سیستم شما را هر چه تعداد کاربران بیشتر شود کند تر خواهد کرد.
سلام.
چرا همه کد های ایجاد شده رو دریافت میکنید بعد با in_array چک میکنید که این کد وجود دارد؟
خوب روش بهتر این است همین کار را با کوئری ساده select انجام دهید. اگر این کد وجود داشت که یعنی کد تکراری است و اگر نبود یعنی کد جدید شما یکتا است.
شانس رخ دادن چنین چیزی البته 1 به 1000000000 است. ولی باز هم به این صورت چک کنید خیلی سریع برنامه اجرا می شود.
سلام هادی عزیز
دقیقا به همون شکلی که شما اشاره کردین تغییر دادم ولی من بیشتر هدفم این بود که تحت هر شرایطی فقط و فقط یک کوئری به بانک زده بشه
که فکر میکنم با این حالت اتفاقا همون یک کوئری در بدبینانه ترین حالتش زده میشه
خوب یک کوئری با چه حجمی از اطلاعات؟
یک کوئری که فقط یک ستون و یک ردیف را بررسی میکند
یا یک کوئری که اطلاعات یک ستون را واکشی میکند و وارد رم میکند تا پردازش in_array انجام شود.
همین موضوع سیستم شما را هر چه تعداد کاربران بیشتر شود کند تر خواهد کرد.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟