程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL使用group_distinct後如何得到總記錄數(行數)

MySQL使用group_distinct後如何得到總記錄數(行數)

編輯:MySQL綜合教程

  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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved