我一直在试用Rails一个月了。我真的很享受! 但是我遇到了一个问题,希望有人可以帮助我!
我的数据库很简单,有3个表:
用户(id,Name)
User_status_code(id,status_code_id,user_id,timestamps)
status_code(id,description)(状态为:1 =已创建,2 =有效,3 =无效,4 =已删除)
User表与status_code通过user_status_code具有多对多关系。
如何查找status_id = 3(非活动)但不是status_id = 4(已删除)的所有用户?
和
如何根据user_status_code表中的'created_at'获取具有最新status_id的用户的明确列表?
实施例:
在user_status_code中,我有7个条目,有3个用户:
Id,user_id,status_code_id,created_at
1,1,1,15-12-2010
2,1,1,16-12-2010
3,2,1,15-12-2010
4,3,1,17-12-2010
5,3,2,20-12-2010
6,3,3,21-12-2010
7,3,4,22-12-2010
如何显示所有用户的最新状态?
这就是我想要的:
2,1,1,16-12-2010
3,2,1,15-12-2010
7,3,4,22-12-2010
(抱歉我的英文) /基督教
答案 0 :(得分:0)
我确信使用某种左外连接有一个更漂亮的方法,但这似乎适用于子查询:
SELECT DISTINCT user_id
FROM user_status_codes
WHERE status_code_id = 3 AND user_id NOT IN
(SELECT DISTINCT user_id
FROM user_status_codes
WHERE status_code_id = 4)
同样,这可能是一种更清洁,更快速的方法,但试试这个:
SELECT user_id, status_code_id, created_at
FROM user_status_codes t1
WHERE created_at =
(SELECT MAX(created_at)
FROM user_status_codes t2
WHERE t1.user_id = t2.user_id)
将这两个查询映射到各自的AR对象应该是一件小事。