现在有这样一个需求,表1 topics 与 表2 comments 一对多关联,比如一个帖子包含用户的多个评论
表结构如下:
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可以使用其他方法后可以得到不重复的记录? 请指教
分享到:
相关推荐
有这样的一个需求:select count(distinct nick) from user_access_xx_xx; 这条sql用于统计用户访问的uv,由于单表的数据量在10G以上,即使在user_access_xx_xx上加上nick的索引, 通过查看执行计划,也为全索引扫描...
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...
mysql中distinct用法【SQL中distinct的用法】.docx
【DISTINCT】优化之MySQL官方文档翻译
首先对于MySQL的DISTINCT的关键字的一些用法: 1.在count 不重复的记录的时候能用到,比如SELECT COUNT( DISTINCT id ) FROM tablename;就是计算talbebname表中id不同的记录有多少条。 2,在需要返回记录不同...
用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值
单纯的去重操作使用distinct,速度是快于group by的。 distinct支持单列、多列的去重方式。 单列去重的方式简明易懂,即相同值只保留1个。 多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都...
主要介绍了MySQL关键字Distinct的详细介绍的相关资料,需要的朋友可以参考下
主要介绍了MySQL中Distinct和Group By语句的基本使用教程,这里主要是针对查询结果去重的用法,需要的朋友可以参考下
主要介绍了MySQL中distinct与group by的一些比较及用法讲解,二者在查询操作中的用法有很多相似之处,需要的朋友可以参考下
使用Distinct查询.rar使用Distinct查询.rar
主要介绍了MySQL DISTINCT 的基本实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
mysql distinct 语句的应用详解...
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
完美解决distinct中使用多个字段的方法,完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法
在 MySQL 查询中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦。用法也很简单: SELECT DISTINCT * FROM tableName ...
同样可以通过松散索引扫描或者是紧凑索引扫描来实现,当然,在无法仅仅使用索引即能完成 DISTINCT 的时候,MySQL 只能通过临时表来完成。但是,和 GROUP BY 有一点差别的是,DISTINCT 并不需要进行排序。也就是说,...