2011-08-16 68 views
2

當我使用count()函數時MySQL返回一行。我需要使用計數功能分頁系統,我沒有更好的主意。 我的SQL是:爲什麼mysql返回一行?

SELECT *, count(id_question) AS num FROM `questions` LIMIT 0, 10 
+0

不知道我明白你的意思...你想要什麼查詢返回? –

回答

1

COUNT()是一個聚合函數,所以將所有行組合在一起。如果您需要所有行的計數,只需計算您使用的任何語言返回的行數。

0

SQL不允許在整個表上聚集並同時返回所有行。

您必須使用兩個查詢,一個用於總行數(count),另一個用於行本身。

0

您是否嘗試過...

SELECT *, count(*) AS num FROM `questions` LIMIT 0, 10 

,或者乾脆利用mysql_num_rows()來獲取計數?

0

由於count是一個聚合函數,它在設計時只返回一行。您將有兩個使用兩個查詢,一個用於選擇,另一個用於計數。 或者你可以做一個嵌套查詢:

SELECT *, (SELECT count(id_question) from 'questions') AS num FROM `questions` LIMIT 0, 10 
+0

我相信這是一個相對昂貴的操作,因爲它會爲每一行執行子查詢。如果我是正確的,INNER JOIN子查詢更好,如下所示:http://stackoverflow.com/questions/7076120/why-mysql-return-one-row/7076297#7076297 –

0

你可以在你的正常結果查詢中使用mysql_num_rows($queryHandle)。舉個例子:

$query = 'SELECT * FROM `questions` LIMIT 0, 10'; 
$queryHandle = mysql_query($query); 
$count = mysql_num_rows($queryHandle); 
$firstRow = mysql_fetch_assoc($queryHandle); 
0

嘗試:

SELECT * FROM `questions` a 
INNER JOIN (
    SELECT count(`id_question`) as `num` 
    FROM `questions` 
) b 
LIMIT 0, 10; 

每一行現在有表的總行數爲列名爲num