質問に関連することのみを説明し、その他の無関係な詳細は省略します。
現在の状況:
コインとユーザーの 2 つのテーブルがあります。
coin
id, uid, fid.
コイン テーブルには、ユーザー (システムに既に登録されており、友人を招待できるユーザー) とその友人 (既に招待を受け入れ、メンバーになったユーザー) との間で関連付け られる 3 つのフィールドがあります。
id
ユニークなインデックスです。
uid
ユーザーIDを保存することです。
fid
友達ID(招待を受けてシステムのメンバーになった友達)を保存することです。
users
id, fname, lname, email
...etc などのユーザーに関する通常の情報があり、date_create
目的:最も多くの招待を行った勝者 を見つけること。言い換えると。最も多くの招待を行ったトップ ユーザーとその招待された友人を見つけるには、2012 年 8 月 31 日より前に登録している必要があります。日付はテーブル 'users' 列 date_create に格納されます。日付形式は yyyy-mm-dd です
例-
Table coin
id uid fid
1 333 777
2 444 888
3 555 999
4 333 123
5 444 456
6 333 789
Table users
id date_create
333 2012-07-15
444 2012-07-20
555 2012-07-25
777 2012-07-25
888 2012-07-25
999 2012-10-02 <-- I don't need this to be counted
123 2012-07-25
456 2012-07-25
789 2012-07-25
ユーザー 333 が最も多くの招待 (招待された 3 ユーザー) を持っていることを意味します -> 777,123 および 789、ユーザー 444 は 2 ユーザーを招待し、ユーザー 555 は 1 ユーザーのみを招待しましたが、555 については、彼の友人 (999 人) が 2012 年以降に登録したため、カウントされません。 -08-31
私が欲しいのはユーザーです
333 has made 3 invitations before 2012-08-31.
444 has made 2 invitations before 2012-08-31.
私がこれまでに行ったことは次のとおりです。[これについてはまったく確信が持てません]
SELECT
c.uid,
u.fname,
u.lname,
u.phone,
u.email,
u.country,
COUNT(c.fid) AS NoOfFriends
FROM coin AS c
JOIN users AS u
ON c.uid = u.id
GROUP BY c.uid
ORDER BY NoOfFriends desc
このクエリは、(私の知る限り)友人がいつ登録したかに関係なく、ほとんどの招待状を持つユーザーをもたらします。
だから私の質問は: Q1) 日付条件をクエリに適用する方法は?
友達招待数が一番多いユーザーが欲しいです。招待された友人は、2012 年 8 月 31 日より前に招待を受け入れ、登録している必要があります。その日以降に受け入れられた他の招待状はカウントされません。
コード例を教えてください。