當我使用count()函數時MySQL返回一行。我需要使用計數功能分頁系統,我沒有更好的主意。 我的SQL是:爲什麼mysql返回一行?
SELECT *, count(id_question) AS num FROM `questions` LIMIT 0, 10
當我使用count()函數時MySQL返回一行。我需要使用計數功能分頁系統,我沒有更好的主意。 我的SQL是:爲什麼mysql返回一行?
SELECT *, count(id_question) AS num FROM `questions` LIMIT 0, 10
,當你使用任何aggregate function,沒有group by
條款,你看到的只有一個結果。
COUNT()是一個聚合函數,所以將所有行組合在一起。如果您需要所有行的計數,只需計算您使用的任何語言返回的行數。
SQL不允許在整個表上聚集並同時返回所有行。
您必須使用兩個查詢,一個用於總行數(count),另一個用於行本身。
您是否嘗試過...
SELECT *, count(*) AS num FROM `questions` LIMIT 0, 10
,或者乾脆利用mysql_num_rows()來獲取計數?
由於count是一個聚合函數,它在設計時只返回一行。您將有兩個使用兩個查詢,一個用於選擇,另一個用於計數。 或者你可以做一個嵌套查詢:
SELECT *, (SELECT count(id_question) from 'questions') AS num FROM `questions` LIMIT 0, 10
我相信這是一個相對昂貴的操作,因爲它會爲每一行執行子查詢。如果我是正確的,INNER JOIN子查詢更好,如下所示:http://stackoverflow.com/questions/7076120/why-mysql-return-one-row/7076297#7076297 –
你可以在你的正常結果查詢中使用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);
嘗試:
SELECT * FROM `questions` a
INNER JOIN (
SELECT count(`id_question`) as `num`
FROM `questions`
) b
LIMIT 0, 10;
每一行現在有表的總行數爲列名爲num
。
不知道我明白你的意思...你想要什麼查詢返回? –