我在mysql模式中有此表:
id | user_id | cellphone_id | favorited_at | unfavorited_at
1 | 234 | 7 | 2019-04-09 12:35:02 |
2 | 234 | 5 | 2019-04-09 13:00:02 |
4 | 234 | 7 | 2019-04-09 12:35:02 | 2019-04-10 12:35:02
此表代表应用程序用户喜爱的所有手机的历史记录。
在上面的示例中,phones_id 7在2019-04-09时最受欢迎,而在2019-04-10则不受欢迎。
所以我现在想构建一个查询来选择所有用户喜欢的手机,所以当我运行查询时,结果应该是这样的:
SELECT * FROM favorite_user_cellphone
WHERE user_id = 234 AND <something.....>
结果应该是:
id | user_id | cellphone_id | favorited_at | unfavorited_at
2 | 234 | 5 | 2019-04-09 13:00:02 |
应该只返回mobile_id 5,因为mobile_id 7是最喜欢的,而不是最喜欢的。
答案 0 :(得分:1)
您可以使用NOT EXISTS
查询:
SELECT *
FROM t
WHERE unfavorited_at IS NULL
AND NOT EXISTS (
-- t is a favorited record
-- x is an unfavorited record that is more recent than t
SELECT 1
FROM t AS x
WHERE user_id = t.user_id
AND cellphone_id = t.cellphone_id
AND unfavorited_at > t.favorited_at
)
答案 1 :(得分:0)
对于单个用户,我认为您可以使用order by
和limit
:
SELECT uc.*
FROM favorite_user_cellphone uc
WHERE user_id = 234 AND <something.....>
ORDER BY favorited_at DESC
LIMIT 1;
答案 2 :(得分:0)
--interactive
答案 3 :(得分:0)
使用
选择*从“ favourite_user_cell_phone”中的user_id = 234而不能进入(从“ favourite_user_cellphone”中的SELECTphone_id = 234,而unfavorited_at不为null)