PDA

View Full Version : سوال: افزودن همزمان 999999 رکورد در دیتابیس



code.nevis
جمعه 11 مرداد 1387, 02:58 صبح
سلام :لبخند:

من می خوام توسط بهترین روش موجود 999999 رکورد رو توی جدول دیتابیس ( از نوع MySQL ) درج کنم

ID هر رکورد برای من مهمه که متفاوت باشه

وگرنه بقیه مقادیر یکی هستند .

استفاده از حلقه ی for یا while زمان زیادی می خواد . ممکنه با پیغام 60 ثانیه php روبرو بشیم

فرض کنید 10 تا کاربر بخواهند 999999 رکورد رو با فشردن یک دکمه وارد جدول کنند .

دستوری وجود داره این کار رو در کمترین زمان ممکن انجام بده ؟

آیا دستور SQL ی برای هر چه بهتر انجام دادن این کار وجود داره ؟

نمونه :


for ($i = 1; $i <= 999999; $i++)
$Insert = mysql_query ("INSERT INTO `MyTable` (`id` ,`name` )VALUES ('$i', 'MyName')");


فقط شماره ID فرق می کنه

با تشکر از دوستان

امید امرایی
جمعه 11 مرداد 1387, 15:00 عصر
همچین موردی در وب عملا تا بحال اتاق نیفتاده که 999999 تا کاربر هم زمان بخوان با بانک اطلاعاتی ارتباط برقرار کنن !!!!
اگه چنین اتفاقی هم بیفته داخل یک حلقه for نیست که Execution Tomeout اتفاق بیفته .

tabib_m
جمعه 11 مرداد 1387, 15:36 عصر
مشکل زمان که با کد زیر حله:


set_time_limit(0);

توی خط اول کدت بذارش، محدودیت زمانی برداشته میشه...

برای این کار:
1- نیازی به تعیین شماره ی ID نداری، وقتی فیلدت Auto increment باشه، خودش ID تعیین میکنه...
2- اگر مقدار همه ی رکوردهای فیلد name یکی هست، میتونی براش یک مقدار پیشفرض تعیین کنی...
بعد هم میتونی از یک بار دستور SQL برای درج این رکوردها استفاده کنی:


set_time_limit(0);

$query="INSERT INTO `MyTable` (`id`) VALUES ('')".str_repeat(",('')",999998);

mysql_query($query);


موفق باشید.

code.nevis
جمعه 11 مرداد 1387, 16:33 عصر
tabib_m (http://barnamenevis.org/forum/member.php?u=11132) ممنون از جوابی که دادین

milade
شنبه 12 مرداد 1387, 06:43 صبح
با دکمه تشکر هم می تونستی احساست رو بروز بدی.

vahid4134
یک شنبه 13 مرداد 1387, 15:52 عصر
مشکل زمان که با کد زیر حله:


set_time_limit(0);
توی خط اول کدت بذارش، محدودیت زمانی برداشته میشه...

برای این کار:
1- نیازی به تعیین شماره ی ID نداری، وقتی فیلدت Auto increment باشه، خودش ID تعیین میکنه...
2- اگر مقدار همه ی رکوردهای فیلد name یکی هست، میتونی براش یک مقدار پیشفرض تعیین کنی...
بعد هم میتونی از یک بار دستور SQL برای درج این رکوردها استفاده کنی:


set_time_limit(0);

$query="INSERT INTO `MyTable` (`id`) VALUES ('')".str_repeat(",('')",999998);

mysql_query($query);
موفق باشید.
هواستون به حجم دستوری که توسط mysql در هر کوئری انجام میشه هم باشه ( چون mysql در هر کوئری تا یک حد حجم کد رو اجرا میکنه که توی تنظیمات مربوط به mysql موجود هست)

code.nevis
دوشنبه 14 مرداد 1387, 18:33 عصر
از شما تشکر می کنم بابت جواب های مفیدتون
اگر بخواهیم 999999 رکورد به صورت زیر Insert کنیم
شما چه راهی پیشنهاد می کنید
ID
Name
Number
شماره ID یکی باشه و auto_increment نباشه
مقدار Name یکی باشه
مقدار Number فرق می کنه
مثلاً یوزری که می خواد 999999 تا رکورد ( مثال ) Insert کنه
آخرین رکوردی که Insert کرده مقدار Number اون برابر با 50 است
یعنی قبلاً 50 رکورد Insert کرده
و به شکل زیر باشه
2 رکورد بعد از اون 50 تا رکورد فبلی




$Insert = mysql_query ("INSERT INTO `MyTable` (`ID` ,`Name` ,`Tell` )VALUES ('120', 'Ali', '51')");
$Insert = mysql_query ("INSERT INTO `MyTable` (`ID` ,`Name` ,`Tell` )VALUES ('120', 'Ali', '52')");

maysamscript
چهارشنبه 16 مرداد 1387, 11:12 صبح
خوب هر بار که insert میکنی مقدار number رو عوض کن!

tabib_m
چهارشنبه 16 مرداد 1387, 11:56 صبح
عزیز دل برادر، دقیقا از همون روشی که گفتم استفاده کن!! (سوالت هیچ فرقی با قبل نکرد!) برای فیلدهای ثابت مقدار پیشفرض تعیین کن و فیلدی که قراره عددش عوض بشه رو auto_increment کن! بعد هم همون دستور...