浏览 2583 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-19
表结构如下: Table topics: +----+----------+------------------------------------+ | id | name | content +----+----------+------------------------------------+ Table comments +----+----------+---------------+-------------------+ | id | name | topic_id | user_id +----+----------+---------------+--------------------+ 我现在想查出一个用户参与评论的topics,首先想到用distinct,而MySQL对distinct的支持不好,必须只有这样使用: mysql> select * , count(distinct user_id) from comments where user_id= 1 group by user_id; +----+----------+------------------------------------------------------------------------------+ | id | name | topic_id | user_id | count(distinct user_register_id) +----+----------+------------------------------------------------------------------------------+ | 1 | aa | 1 | 1 | 1 +----+----------+------------------------------------------------------------------------------+ 1 row in set (0.00 sec) 这样在MySQL中是将结果正确得出,但是还没结束,我需要将这个结果映射给Rails的ActiveRecord,因为查出的结果多了一个字段 count(distinct user_register_id),结果AR不认识了,查出来的结果为空,我晕!修改一下 mysql> select * , count(distinct user_id) as name from comments where user_id= 1 group by user_id; +----+----------+------------------------------------------------------------------------------+ | id | name | topic_id | user_id | name +----+----------+------------------------------------------------------------------------------+ | 1 | aa | 1 | 1 | 1 +----+----------+------------------------------------------------------------------------------+ 1 row in set (0.00 sec) 问题就是这样了,就是采用MySQL的distinct以后怎么去做ORMapping?难道我要添加一个字段?或者我这个需求有没有其他的解法?比如用left join,但是我不知道怎么在left join的时候去掉相同的字段。或者得到用户评论的topics可以使用其他方法后可以得到不重复的记录? 请指教 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-03-19
可能是问的不够清楚,自问自答了,其实方法也是一位朋友提供的
解决办法还是避开使用MySQL,有两种办法: 1.使用left join(我现在就用这个) MySql> select t.* from topics as t left join comments as c on t.id = c.topic_id where c.user_id = 1; 然后查出来的结果使用 topic.uniq, 2.覆盖Comment的Uniq方法 重新定义Model Comment的hash 和eql?方法 ruby 代码
我朋友还说还可以在查询的时候使用:first参数查询,可以等同uniq方法,不过这个我没测试。 |
|
返回顶楼 | |