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