PDA

View Full Version : مشکل در محاسبه درصد



imohammad
دوشنبه 25 اسفند 1393, 22:17 عصر
سلام
من دوتا جدول دارم
persons و states
جدول persons با کلید خارجی state_id به جدول state وصله

حالا میخوام نشون بدم چند درصد از person ها واسه کدوم state ـه

خودم این کد رو نوشتم ولی درست کار نمیکنه

foreach(State::all() as $item) {
if($persons->where('state_id','=',$item->id)->count()> 0) {
$percent = ($persons->where('state_id','=',$item->id)->count() * 100)/$persons->count();
} else {
$percent = 0;
}
$items[] = [
'title' => $item->title,
'percent' => $percent
];
}

راه حل بهتری دارین؟

rezakho
سه شنبه 26 اسفند 1393, 00:05 صبح
برای اینکار از خود SQL استفاده کنید بهتره، با یک یا دو SQL در میاد، در صورتی که کد شما n*n تا کوئری میزنه
جوین بزنید جداول رو، COUNT بگیرید و درصد رو حساب کنید

imohammad
سه شنبه 26 اسفند 1393, 12:12 عصر
میشه کدش رو بنویسین:خجالت:؟

golbafan
سه شنبه 26 اسفند 1393, 12:48 عصر
سلام

این تعداد کل جدول افراد رو میده
select count(*) from persons

این هم تعداد افراد رو میده برای هر state
select state_id,count(state_id) from persons group by state_id

این هم درصد
select state_id,(count(state_id)*100/(select count(*) from persons))as prcnt from persons group by state_id

imohammad
چهارشنبه 27 اسفند 1393, 08:53 صبح
آقا دمت گرم این کار کرد
فقط یه مشکل دیگه هست که باید افرادی رو که تا 1 ماه پیش ثبت کردم رو برگردونه
کوئری رو اینجوری تغییر دادم

$timestamp = ($month*30*24*60);
$result = DB::select('select state_id,(count(state_id)*100/(select count(*) from persons WHERE date >= date - ?))as prcnt from persons group by state_id',[$timestamp]);

ولی خب فرقی نمیکنه، افراد قبل تر از یک ماه رو هم حساب میکنه!!