2011-06-18 51 views
1

的同時無選擇行數以及其他數據所以我有一個MySQL查詢是根據傳遞給我的php腳本的參數動態創建的。這是偉大的工作,但是,我想能夠獲取它的行數返回before applying the LIMIT statement。在我看來,這似乎無法在一個查詢中完成,但有太多關於MySQL我不知道,如果可以的話,我絲毫不會感到驚訝。MySQL - 在考慮LIMIT

我環顧四周,並發現COUNT(*)mysql_num_rows()快得多,但據我所知,我也不能在我的情況下使用,因爲他們僅僅是被限制我有多少導致了我的LIMIT規定,通常是30.此外,我寧願不提交不包含LIMIT的查詢,只是爲了獲得返回的數字或行,然後立即應用LIMIT並提交相同的查詢。

下面是一個簡單的查詢:

SELECT DISTINCT w.id, w.resolution, w.views, w.colors, w.favorites 
FROM wallpapers AS w 
LEFT JOIN (tagmap AS tm, tags AS t) 
ON (
    w.id = tm.wallpaper_id 
    AND 
    tm.tag_id = t.tag_id 
) WHERE w.ratio = 
    (SELECT ratio FROM wallpapers WHERE resolution = '1920 x 1080' LIMIT 1) 
AND (
    t.tag 
    IN (
     'portal' 
    ) 
) 
AND (w.verify = 2) 
ORDER BY w.id DESC LIMIT 30 

我已經清理,最多花了很多時間優化它,所以希望它很容易讓你閱讀,但也隨時到別的提什麼你發現時髦的代碼,可以幫助加速這一過程^^

回到問題,一個辦法,我看這樣做會堅持的條件句(一切,但SELECTJOINGROUP BY,和LIMIT基本上)從查詢到SELECT COUNT(*)語句,運行該語句,然後r取消所有數據的實際查詢。這是最有效的方式,還是有人有更好的主意?我很想聽聽所有可能的解決方案,謝謝! :)

回答

2

我想你在找什麼是CALC_FOUND_ROWS

SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name 
WHERE id > 100 LIMIT 10; 

SELECT FOUND_ROWS(); 

它仍然是,雖然兩個查詢。

+0

'SELECT語句可能包含一個LIMIT子句來限制服務器返回給客戶端的行數。在某些情況下,最好知道該語句在沒有LIMIT的情況下會返回多少行,但不需要再次運行語句,我認爲您碰到了頭部。謝謝你,先生! –

+0

我是否用'SQL_CALC_FOUND_ROWS *'替換了我正在使用的'SELECT''?這給了我加入的所有表的所有數據,我寧願不這樣做,那麼我該如何指定要返回的數據?另外,我在phpMyAdmin中運行這個,當我添加'SELECT FOUND_ROWS();'它已經列出,但只是說'你的SQL查詢已成功執行',沒有任何返回。你知道我做錯了什麼嗎? –

+0

無視我的問題,我修好了,再次感謝 –