PDA

View Full Version : select از 200,000 رکورد در حلقه for اشتباه است؟



intel_amd
سه شنبه 29 مهر 1393, 00:50 صبح
جدولی با 200,000 رکورد موجود است که 90 جور سلکت مختلف پشت سر هم در یک حلقه for گرفته می شود
دقیقا مشخص نیست اما احتمال زیاد مشکلی که در زیر رخ می دهد از همینجاست !
پس از سلکت بالا زمانی که جدول 4000 رکورد دارد ومپ cpu زیادی از pc در لوکال هاست نمی گیرد اما وقتی جدول رکوردهایش بالا می رود مثلا 20,000 رکورد می شود یکدفعه cpu 100% می شود و هرچه هم که صبر کنم کوئری پایان نمی یابد
این مشکل احتمالا به خاطر این است که چون سلکت در for قرار دارد و سلکت رکوردهای زیاد کمی زمان میگیرد احتمالا هنوز کار سلکت تموم نشده for می رود و سلکت را دوباره اجرا کند که به هنگ فرو می رود

اول دوستان با تجربه در این زمینه نظرشونو بدن که اصلا این مشکل داره اتفاق میافته یا از جای دیگه ای هست
بعد اگر این مشکل پیش میاد راه حل چیست؟

cpuram
سه شنبه 29 مهر 1393, 01:26 صبح
لطفا کد خودتون بزارید.

intel_amd
سه شنبه 29 مهر 1393, 11:24 صبح
کد چندین صفحس که از حوصله دوستان خارجه اما قسمتی از کد که مد نظره بخش زیره


for($i=0;$i<100;$i+=2){
$j=$i+1;
$result = mysql_query("SELECT * FROM user WHERE a=$j AND b=$i", $con);
.....
...
}

captain_hamid
سه شنبه 29 مهر 1393, 11:43 صبح
خوب اگه شزط کوئزی شما مشخص هست که اول شرط رو تو همون حلقه for ایجاد کنید و در نهایت شرط ایجاد شده رو به قسمت where کوئری اضافه کنید و یک select اجرا کنید.
نمیدونم منظورتون رو درست فهمیدم یا نه.

cpuram
سه شنبه 29 مهر 1393, 11:52 صبح
پیشنهاد من این هست که شما یکبار کل جدول رو بخونید بعدش روی داده های اون کار کنید.اینطوری سیستم هنگ نمیکنه.
بعد از اینکه دیتابیس رو خوندید همه رو fetch کنید و بریزید داخل یک آرایه بعدش حلقه for رو روی اون آرایه پیاده سازی کنید.

nazanin_asadi_1
سه شنبه 29 مهر 1393, 13:54 عصر
کد چندین صفحس که از حوصله دوستان خارجه اما قسمتی از کد که مد نظره بخش زیره


for($i=0;$i<100;$i+=2){
$j=$i+1;
$result = mysql_query("SELECT * FROM user WHERE a=$j AND b=$i", $con);
.....
...
}

با توجه به کدی که گذاشتی نمی دونم هدفت چیه ولی با توجه به شرط هایی که گذاشتی راحت می تونی همه اینها رو با یه کوئری به دست بیاری و اینجوری نیازی نیست

Unique
سه شنبه 29 مهر 1393, 22:27 عصر
توی حلقه query دادن کاملا اشتباهه و مشکل از پیاده سازی و مهندسی نرم افزار شماست که ایراد داره. باید روش و منطق کار را تغییر بدین.