2016-04-12 8 views
0

Bir yönetici için kullanıcıları görmek, kaç kullanıcıyı davet ettikleri ve bu kullanıcılardan kaçının aboneliği için ödeme yaptıklarını anlamak için temel bir tablo oluşturmaya çalışıyorum. zayıflayan tablolar şu şekilde görünür:Toplam sayım verileri dahil olmak üzere sorgu nesnesi

User: id, email 
Referral: id, inviter_id <- (maps to user_id), paid_at (date, is either nil or set) 

I having Sonra görünümüne seti dönmeden önce, sonra sayfalama sıralamayı yapmak, veri toplamak için ihtiyaç olmasıdır. Mümkünse tam kullanıcı nesnesine sahip olmak istiyorum, ancak mümkün olmadığında ihtiyacım olan alanlara yerleştim.

aşağıdaki yeniden işleme çalışıyorum: Bu bana { id: count } karmasını döndüren

User.joins(:referrals).group('users.id').count('referrals.id')

. paid_at IS NOT NULL ile sonuçları nasıl elde edebilirim ve hatta bunları anahtar değer çiftleri olarak alabilirim? Katılmayı deniyorum ama bunun nasıl yapılacağına dair bir kayıp yaşıyorum, herhangi bir yardım büyük beğeni topluyor.

DÜZENLEME

:

sadece kimliği ve e-posta döner Ancak
User.joins(:referrals).select('users.id, users.email, count(referrals.id)').group('users.id, users.email') 

, ben tahmin ediyorum ActiveRecord modeli referrals_count için bir alan olmadığı için:

Ben de bu sorguyu denedim .

DÜZENLEME: Katma SQL

SELECT 
    users.id, 
    users.email, 
    COUNT(DISTINCT(r1.id)) AS referrals_count, 
    COUNT(DISTINCT(r2.id)) AS paid_referrals_count 
    FROM 
    users 
    LEFT JOIN 
    referrals AS r1 ON users.id = r1.inviter_id AND 
    r1.accept_at IS NOT NULL 
    LEFT JOIN 
    referrals AS r2 ON r1.id = r2.id AND 
    r2.paid_at IS NOT NULL 
    GROUP BY 
    users.id, users.email 
    ORDER BY 
    paid_referrals_count 

yukarıdaki sql çalışırsa emin değilim, ben elde etmeye çalışıyordu hangi verilerin bir ilk geçiş oldu.

+0

paylaşın SQL sorgusu, "tercüme" için başlangıçtaki test günü –

cevap

1

"ActiveRecord modelinin referrals_count için bir alanı olmadığı için varsayıyorum." Haklısın. Seçiminizde AS paid_referrals_count kullanın.

User.joins(:referrals).select('users.id, users.email, count(referrals.id) AS paid_referrals_count').group('users.id, users.email')

+0

bu söz konusu alan Repl görünmüyor olsa bile çalışıyor gibi görünüyor. Tabloya uygulamak ve doğru bir şekilde seçilmediğinden emin olmak için kabul eder. Teşekkürler! – Genzume