2013-01-06 27 views
3

我試圖在限制它之前獲取由查詢返回的行的總數。我試圖使用發現here的建議,該建議在第二個查詢中使用:SQL_CALC_FOUND_ROWS,然後FOUND_ROWS();MySQL如何在PHP變量中存儲FOUND_ROWS()

他們舉這個例子:

SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever; 
SELECT FOUND_ROWS() ; 

我無法弄清楚是如何捕捉從FOUND_ROWS()第二個值到一個PHP變量。我在Wordpress中工作,所以我使用全局$ wpdb來處理MySQL交互。這裏是我想要的簡化版本:

$rows = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever;"); 
$count = $wpdb->get_results("SELECT FOUND_ROWS();"); 

第一個查詢可以工作,但$ count總是空的。如果我在phpMyAdmin中運行它們,則查詢運行時不會出錯。

我也試過這樣:

$rows = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever; 
SET @count = FOUND_ROWS();"); 

...但它完全失敗。

我在做什麼錯?

+0

你結合從返回對象的實際價值?你使用的是什麼php mysql類? – Amelia

+0

你有沒有嘗試過它'SELECT SQL_CALC_FOUND_ROWS,FOUND_ROWS()作爲NUMOFROWS東西從your_table WHERE什麼; ' –

+0

'$ rows = $ wpdb-> get_results(「SELECT SQL_CALC_FOUND_ROWS something from your_table WHERE whatever; SELECT FOUND_ROWS();」);'給你一個錯誤? – cheesemacfly

回答

3

如果這是WordPress的,你可以在第二條語句做交替,否則你問一個陣列的數量不限:

$count = $wpdb->get_var('SELECT FOUND_ROWS()'); 

也要照顧數據庫類的wordpress的是開放的變化由於過濾器而導致的任何查詢的默認值,它會在默認情況下執行查詢並從結果集中獲取錯誤。

您應該啓用尖叫以查看是否遇到特定錯誤。

  • $wpdb->show_errors = true自動顯示錯誤,如果WP_DEBUG設置爲true。 (ref
+0

這也適用。在上面的評論中,這與@ 32bitfloat的想法相比如何?我最感興趣的是表演。我還注意到query()返回int,而get_var()返回一個字符串。 – emersonthis

+0

@Emerson:閱讀本手冊,您應該瞭解爲什麼查詢返回int和get_var不是來自代碼:http://codex.wordpress.org/Class_Reference/wpdb - 可能看起來有點多,請仔細檢查這兩個方法閱讀介紹後。 – hakre

+0

對不起,不太清楚。我熟悉這些方法。我剛纔提到它指出了未來的讀者。我真正關心的是性能問題。最初我試圖避免爲了獲得總行而做出另一個查詢,現在我正在這樣做,我試圖找出最聰明的方法來做到這一點。 – emersonthis

0

簡單。使用此:

SELECT FOUND_ROWS() as total; 

,並得到它在PHP:

echo $query[0]->total;