@php
$plans = AppUser::where('under_reference', 2)->count();
@endphp
{{ $plans }} ReferansBu şekilde ID'si 2 olan üyenin 9 tane referansı olduğunu çekebiliyorum.Bana şöyle lazım;
En çok referansa sahip ilk 5 ve kaç ref olduğuda yanında yazacak
7
●303
@php
$plans = AppUser::where('under_reference', 2)->count();
@endphp
{{ $plans }} ReferansBu şekilde ID'si 2 olan üyenin 9 tane referansı olduğunu çekebiliyorum.$query = "SELECT *, COUNT(*) as total FROM user GROUP BY under_reference HAVING under_reference IS NOT NULL order by total DESC";--edit:
$records = AppUser::getHighestReferences();
foreach($records as $record) {
echo "{$record->ownerReference->full_name} <br/>";
}bu sadece ornekti gerisi size kalmis bir olay.
$users = AppUser::all(); // tum userlari aldik
// userlari atayacigimiz dizi, eslestirme yaparken her seferinde sorgu atmayalim, bu diziden cekelim.
$userMap = [];
// en fazla referansa sahip olan userlari bu dizide toplayacagiz, dizide 3 alan olacak. 1 => first_name, 2 => last_name, 3 => references_count (totalde referans sayisi)
$highestReferences = [];
// sistemdeki userlari donup, $userMap tablomuza ekliyoruz
foreach($users as &$u) {
$userMap[$u->id] = $u;
}
/* kullanici tablosundan en cok referansa sahip kayitlari sorgular, donen sonuctaki under_reference degeri ilede referans sahibi kullaniciyi bulacagiz.
* HAVING under_reference IS NOT NULL sorgusu referanssiz kayit olanlari dahil etmemek icin, eger siz null yerine 0 ile dolduruyorsanız referanssiz kayit olanlari sorguyu soyle degistirin (asagida)
* HAVING under_reference > 0
**/
$results = DB::select('SELECT *, COUNT(*) as total FROM users GROUP BY under_reference HAVING under_reference IS NOT NULL order by total DESC LIMIT 5');
// yukardaki sorgudan donen kayitlari donelim ve referansa sahip user ile eslestirelim.
foreach($results as $result) {
$user = isset($userMap[$result->under_reference]) ? $userMap[$result->under_reference] : false;
// eger referans sahibi user , kayitlarimizda yoksa es gecelim.
if (!$user) continue;
/* referansın sahibini asagidaki diziye ekleyelim
* (first_name, last_name alanlari users tablosundan gelecek [sizde farkliysa kendinize gore duzenleyin kodu], $result->total ise yukardaki sorguda count unu aldigimiz referans toplami olacak)
**/
$highestReferences[] = [
'first_name' => $user->first_name,
'last_name' => $user->last_name,
'references_count' => $result->total
];
}
// burda ise olusturdugumuz veriyi dumpluyoruz, dogru sonucu gormus olmamiz gerek.
// siz listelemek icin asagidaki diziyi viewa gonderip, foreach icinde listeletebilirsiniz.
dd($highestReferences);