次のクエリから次の結果が得られました。
SELECT users.ID, user_registered, post_date, post_type
FROM users LEFT OUTER JOIN posts ON users.ID = post_author
ORDER BY ID, user_registered, post_date, post_type
ID user_registered post_date post_type
---+-----------------+------------------+--------------+
1 6/18/2012 4:04 6/18/2012 4:04 page
1 6/18/2012 4:04 6/18/2012 4:04 post
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:32 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:33 nav_menu_item
1 6/18/2012 4:04 6/18/2012 10:48 attachment
1 6/18/2012 4:04 6/19/2012 10:32 attachment
1 6/18/2012 4:04 6/30/2012 6:49 nav_menu_item
1 6/18/2012 4:04 6/30/2012 7:04 nav_menu_item
1 6/18/2012 4:04 7/1/2012 7:39 attachment
1 6/18/2012 4:04 7/13/2012 10:00 page
1 6/18/2012 4:04 7/20/2012 18:18 page
1 6/18/2012 4:04 7/21/2012 16:37 post
1 6/18/2012 4:04 7/23/2012 14:15 page
1 6/18/2012 4:04 7/31/2012 15:12 post
1 6/18/2012 4:04 8/1/2012 8:47 attachment
2 6/19/2012 10:05 NULL NULL
6 6/29/2012 4:47 6/19/2012 10:11 attachment
6 6/29/2012 4:47 6/19/2012 10:15 attachment
6 6/29/2012 4:47 6/19/2012 10:17 attachment
6 6/29/2012 4:47 6/19/2012 10:20 attachment
6 6/29/2012 4:47 6/19/2012 10:22 attachment
6 6/29/2012 4:47 6/28/2012 0:00 employee
6 6/29/2012 4:47 6/29/2012 0:00 employee
6 6/29/2012 4:47 8/1/2012 0:00 employee
6 6/29/2012 4:47 8/2/2012 0:00 employee
6 6/29/2012 4:47 8/2/2012 0:00 employee
6 6/29/2012 4:47 8/2/2012 0:00 employee
7 7/7/2012 16:52 7/31/2012 14:26 post
20 7/21/2012 14:48 7/21/2012 21:53 post
20 7/21/2012 14:48 7/22/2012 12:50 post
21 7/27/2012 14:56 NULL NULL
ID
: ユーザーID。一意の主キーuser_registered
: ユーザーがサイトの一部になった日時post_date
: ユーザーが投稿を作成した日時post_type
: ユーザーが作成した投稿の投稿タイプemployee
ユーザーが最後に投稿してからの日数を取得する必要があります(post_date
wherepost_type = 'employee'
)。- ユーザーが
employee
まだ投稿していない場合は、ユーザーが登録してからの日数を取得する必要があります (user_registered
)。
要件
ID
すべてのユーザーのだけを取得する必要があります
- その最新の
employee
投稿日は、たとえば< 7
数日または>= 14
数日、またはBETWEEN 6 AND 14
必要に応じてです。また employee
ユーザーに投稿がない場合は、< 7
日または>= 14
日を登録したユーザーを取得するかBETWEEN 6 AND 14
、#1 のようにします。
< 7
ケースに対して次のクエリを試しました。
SELECT users.ID
FROM users LEFT OUTER JOIN posts ON users.ID = post_author
GROUP BY ID
HAVING MIN(DATEDIFF(NOW(), IFNULL(post_date, user_registered))) < 7
ID
次の理由により、期待どおりに s 1、6、および 7 が生成されます。
- 投稿を持っているユーザー (6) は、他の s の
employee
他の投稿を持っていません。post_type
と - 投稿を持っていないユーザー (1、7) は、日付
employee
から計算を取得しました。user-registered
しかし、このクエリは次の場合に壊れます
- 投稿を持っているユーザーは他の
employee
投稿も持っていますpost_type
employee
post_type
日付の計算を投稿のみに制限できないためです。ユーザーがpost
または またはpage
を持っている場合attachment
、たとえば最新の よりも 2 日新しい場合employee
、日付計算では代わりにpost
またはpage
またはからの結果が返されattachment
ます。
だから私は を含めようとしましたが、他のすべてのユーザーが投稿を持っていないため、返されるのは6つWHERE post_type = 'employee'
だけです。したがって、要件の 2 番目を失います。ID
employee
どうすればいいですか?前もって感謝します。