我有以下查詢以下結果:如何正確地從MySQL中的連接表中取出受日期計算約束的記錄?
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
其中post_type = 'employee'
)。 - 如果用戶還沒有發佈
employee
帖子,那麼我需要獲取用戶註冊後的天數(user_registered
)。
- 我需要得到用戶上次發帖後的天數
需要量
我需要得到的只是所有用戶
- 其最新
employee
發佈日期是如的ID
< 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
的1,6和7如預期的,因爲:
- 用戶(6)誰有
employee
的帖子沒有任何其他帖子的其他post_type
s;和 - 沒有
employee
帖子的用戶(1,7)從他們的user-registered
日期計算得出。
但隨後此查詢休息時
- 誰也有一個
employee
後用戶有其他post_type
小號
,因爲我不能限制日期計算到的employee
post_type
職位只要。如果用戶有一個post
或page
或attachment
是,比方說,2天更近的比他的最新employee
,日期計算將返回從post
或page
或attachment
,而不是結果。
所以我試圖包括WHERE post_type = 'employee'
,但只有ID
6永遠返回,因爲所有其他用戶沒有employee
後。所以我失去了我的要求#2。
我該如何解決這個問題?提前致謝。
hm ..這將返回一個空的結果集..在它上面工作,直到我可以使其工作..任何其他想法?謝謝 – 2012-08-03 09:26:07
感謝編輯。謝謝mucho – 2012-08-03 09:30:10
@AnaBan,你的日期列的數據類型是什麼數據類型?在你的例子結果中,這不會影響你的數據類型看起來像有效的DATETIME數據。 – 2012-08-03 09:31:05