视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL使用group_distinct后如何得到总记录数(行数)_MySQL
2020-11-09 18:14:12 责编:小采
文档


bitsCN.com MySQL_使用group_distinct后_如何得到总记录数(行数) 问题: 使用了group或者distinct等后,如何得到查询结果的总记录数? --要求,不使用子查询 分析:如果没有group,count(*) 就可以了。但是,使用了就不同了。数据库里使用统计函数,针对的是group。这个时候,如何得到查询结果记录总数,是个问题。 可行性分析:这个问题有解么?如果不可能的事情,就别搞了,例如永动机,3等分等问题。在mysql的终端查询结果: mysql> select tag_id from labels where 1 = 1 group by tag_id;+--------+| tag_id |+--------+| 0 || 1 || 2 || 3 || 4 || 6 || 9 || 11 || 22 || 54 |+--------+10 rows in set (0.00 sec)最后居然有个数:10 rows既然终端都有了,那应该有个地方存储。(推测mysql不会自己去再查一次,因为自己就握有结果) 解决方案: 使用found_rows函数 mysql> select found_rows();+--------------+| found_rows() |+--------------+| 10 |+--------------+1 row in set (0.00 sec) 可能问题:在多线程的情况下,会有问题么。Java中,多个线程共同持有一个connection时,会发生问题。t1查询select tag_id from labels where 1 = 1 group by tag_id;t2查询别的t1查询select found_rows();这样得到的是t2的查询结果。 在Hibernate等线程池的情况下,每个线程会一直持有当前的connection直到线程结束。这样的话,每个线程的connection是不同的,不会发生冲突。但必须保证两个语句之间别有别的查询sql执行。 其他:ROW_COUNT()可以查看上次update操作影响的行数。 ====END==== 作者 fantaxy025025 bitsCN.com

下载本文
显示全文
专题