表1,用戶表 user
表2,用戶記錄表 from_id
SELECT * from `user` `u` LEFT JOIN `form_id` `f` ON u.id = f.user_id
WHERE (`f`.`addtime` >= 6天前的時間) AND (`f`.`addtime` <= 3天前的時間)
ORDER BY `f`.`addtime` DESC LIMIT 20;
需求是篩選出前3天沒有記錄的用戶,這個如何實作?
上面這個我實作的篩選出(前6~3天)的最后一次時間的用戶記錄。
但是如果用戶記錄表有( 最近3天內)的記錄,也是會把(前6~3天)的記錄給查詢出來。
正常查詢是會把符合條件的都查詢示出來。
那或者說如何在條件2(最近3天內)符合的情況下,把條件1(前6~3天)符合的都去除呢?
uj5u.com熱心網友回復:
能再說的詳細點嗎,最好把查詢結果,和你想要的查詢結果發出來。uj5u.com熱心網友回復:
需求:篩選出前3天沒有記錄的用戶
SELECT
*
FROM
USER u
WHERE
u.id != ANY ( SELECT DISTINCT f.user_id FROM form_id f WHERE f.addtime >= DATE_SUB( CURDATE( ), INTERVAL 3 DAY ) )
uj5u.com熱心網友回復:
我自己已經解決了,就是看上去有點復雜,不知道性能會不會差,因為form_id 這個表是操作記錄表所以資料會比較多。麻煩大家幫我看一下哈
整體需求就是獲取6天內有記錄,但是前3天沒有記錄的用戶。
下面是代碼,簡化了一些不必要的條件。
SELECT
`u`.`id`, `f`.`addtime` AS `f_addtime`
FROM `user` `u` LEFT JOIN `form_id` `f` ON f.user_id = u.id and f.type = 'form_id' and
NOT EXISTS(SELECT 1 FROM form_id ff
WHERE ff.user_id = f.user_id AND ff.type = 'form_id' AND ff.addtime >= 3天前的時間戳)
WHERE `f`.`type`='form_id' AND `f`.`addtime` >= 6天前的時間戳 AND `f`.`addtime` <= 3天前的時間戳
ORDER BY `f`.`addtime` DESC LIMIT 20
uj5u.com熱心網友回復:
謝謝,不過你這個只能取到用戶的欄位,而且需求是前6天內得有資料的(這個是我沒表達清楚)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/43441.html
標籤:MySQL
上一篇:MHA啟動不了
