2012-03-13 69 views
0

我想在sql中獲取所有行數。獲取表格的總行數

表的第2列看起來像

enter image description here

我的功能看起來像$total

  $limit=2; 
      $sql = "SELECT id,COUNT(*),dt,title,content FROM news ORDER BY dt DESC LIMIT " . $limit; 
      $stmt = $this->db->prepare($sql); 
      $stmt->execute(); 
      $stmt->bind_result($id, $total, $datetime, $title, $content); 
      $stmt->store_result(); 
      $count = $stmt->num_rows; 
      if ($count > 0) { 
       while ($stmt->fetch()) { 

內循環,我得到確切價值,但MySQL的只選擇1行 - 行號爲1(並且$count也爲1)

試過此sql

SELECT id,dt,title,content FROM news ORDER BY dt DESC LIMIT 2

一切順利。

爲什麼在第一種情況下它只選擇1行?我該如何解決這個問題?

對於我的表有5行。我想讓其中的2個包含所有字段,並通過一個查詢獲取所有行數(本例中爲5)。

+3

字裏行間,我想你可能想['SQL_CALC_FOUND_ROWS'](http://dev.mysql.com/doc/refman/5.0/en /information-functions.html#function_found-rows)... – DaveRandom 2012-03-13 22:32:47

+0

你可以編輯包含你想要的結果是@epic_syntax嗎? – ImGreg 2012-03-13 22:34:39

+0

@ImGreg爲我的表有5行。我想獲取其中的2個,並通過一個查詢獲取所有行數(本例中爲5個)。 – heron 2012-03-13 22:36:22

回答

2

嘗試添加GROUP BY dt如果你想使用COUNT(*)(不知道你爲什麼使用它)。

編輯

好,如果你堅持這樣做在一個單一的呼叫,在這裏:

$sql = "SELECT id,(SELECT COUNT(id) FROM news) as total,dt,title,content FROM news ORDER BY dt DESC LIMIT " . $limit; 
+0

獲得$總= 1當我使用GROUP BY dt – heron 2012-03-13 22:39:53

+0

這不是解決方案 – heron 2012-03-13 22:51:42

0

這是變量$限制可能的原因被設置爲1,或者未設置與MySQL的缺省值爲1試着改變你的第一線,

$sql = "SELECT id,COUNT(*),dt,title,content FROM news ORDER BY dt DESC"; 

編輯

更改爲:

$sql = "SELECT SQL_CALC_FOUND_ROWS,id,dt,title,content FROM news ORDER BY dt DESC LIMIT " . $limit; 

,然後使用第二個查詢與

SELECT FOUND_ROWS() 

獲得匹配查詢

+0

我需要限制。試過了,沒有改動 – heron 2012-03-13 22:34:03

+0

然後你想使用SQL_CALC_FOUND_ROWS就像@DaveRandom說的那樣。看看我的編輯瞭解更多信息。 – 2012-03-13 22:39:38

+0

我說過,我想用一個唯一的查詢來得到它。第二種查詢有很多方法 – heron 2012-03-13 22:43:30

2

刪除COUNT(*)的行數。如果你將它留在那裏,你將只能得到1行。

+0

太聰明瞭,哈哈))。我發佈這個問題得到的解決方案不是這個「答案」 – heron 2012-03-13 22:44:12

0

完全造成十分嚴重的一個問題HW的......爲什麼別的除了教授的增加複雜性的簡單問題智障方法,你會不希望運行兩個查詢?

反正....這裏:

SELECT id, (SELECT COUNT(*) FROM news) AS row_count, dt, title, content FROM news ORDER BY dt DESC LIMIT