必要なすべての日付のMySQL変数を使用して自動化された結果セットを構築できます。
select
AllDaysYouWant.MyJoinDate,
count( U.User_ID ) as NumberJoined
from
( select
@curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
from
( select @curDate := '2012-11-21' ) sqlvars,
Users
limit 18 ) AllDaysYouWant
LEFT JOIN Users U
on AllDaysYouWant.MyJoinDate = U.User_JoinDate
group by
AllDaysYouWant.MyJoinDate
内部クエリ、私はキーなしでusersテーブルに参加しているので、必要な日数を表すためにX個のレコードを循環するために使用されます...これは30、100などです。テーブル(この場合はユーザー)が、期待する数のレコードを持っている限り。
次に、日数だけの結果がusersテーブルに結合されますが、今回はユーザーのJOIN_DATEに基づきます。単純なCOUNT()で、必要なものを取得できます。
「AllDaysYouWant」は、
の内部の最初の部分のクエリに割り当てられたエイリアスです。 ( select
@curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
from
( select @curDate := '2012-11-21' ) sqlvars,
Users
limit 18 ) AllDaysYouWant
これは基本的に次のように述べています...usersテーブルから(ただし、任意の場合があります)、18行のデータを取得します(制限を介して、ただしほぼすべてのレコード数になる可能性がありますが、必要なのは11月22日から12月6日までです。 14日ですが、原則として18を実行しましたが、ほとんど何でもかまいません。Usersテーブルの上には(select @curDate:='2012-11-21')sqlvarsがあります。テーブルソースにはエイリアスを指定する必要があります。これは使用する変数であるため、名前は関係ありません。したがって、このクエリは11月21日に変数を開始し、Select @curDate:=Date_Add .. .. blah blahは、@ curDateの現在の値を取得し、それに1日を追加して(現在は11月22日)、返された行「MyJoinDate」に格納すると述べています。したがって、この内部クエリは、11月22日からの日付だけのテーブルを作成します。 18日分のデータを転送し、残りのクエリを参照するためのエイリアス「AllDaysYouWant」を使用します。
おそらくあなたが遭遇したものであるクエリを、明確にするためにすべてをalias.fieldに調整しました...