的同時無選擇行數以及其他數據所以我有一個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
我已經清理,最多花了很多時間優化它,所以希望它很容易讓你閱讀,但也隨時到別的提什麼你發現時髦的代碼,可以幫助加速這一過程^^
回到問題,一個辦法,我看這樣做會堅持的條件句(一切,但SELECT
,JOIN
,GROUP BY
,和LIMIT
基本上)從查詢到SELECT COUNT(*)
語句,運行該語句,然後r取消所有數據的實際查詢。這是最有效的方式,還是有人有更好的主意?我很想聽聽所有可能的解決方案,謝謝! :)
'SELECT語句可能包含一個LIMIT子句來限制服務器返回給客戶端的行數。在某些情況下,最好知道該語句在沒有LIMIT的情況下會返回多少行,但不需要再次運行語句,我認爲您碰到了頭部。謝謝你,先生! –
我是否用'SQL_CALC_FOUND_ROWS *'替換了我正在使用的'SELECT''?這給了我加入的所有表的所有數據,我寧願不這樣做,那麼我該如何指定要返回的數據?另外,我在phpMyAdmin中運行這個,當我添加'SELECT FOUND_ROWS();'它已經列出,但只是說'你的SQL查詢已成功執行',沒有任何返回。你知道我做錯了什麼嗎? –
無視我的問題,我修好了,再次感謝 –