2012-10-16 32 views
0

我有這樣的MySQL查詢:獲得總MySQL的結果從查詢返回了限制:FOUND_ROWS錯誤

SELECT Files.GUID, Files.Name, Files.Type, Files.Visibility, Files.CreationDate, Files.OwnerUser, Date, BackupsCount 
FROM Files 
    LEFT JOIN (
    SELECT FileGUID, Date, COUNT(*) AS BackupsCount 
    FROM Versions 
    GROUP BY FileGUID 
) Versions ON Files.GUID = Versions.FileGUID 
WHERE Files.ParentFolder = '96251A8B-B2A8-416B-92D7-3509E6A645C7' 
ORDER BY Files.Type DESC, CreationDate ASC 
LIMIT 0, 50 

我想知道這個查詢需要多少記錄返回如果限制指令是不存在,我用Google搜索,發現我需要添加SELECT SQL_CALC_FOUND_ROWSSELECT FOUND_ROWS();

我的問題是:我無法得到它的工作:

SELECT SQL_CALC_FOUND_ROWS * FROM (
SELECT Files.GUID, Files.Name, Files.Type, Files.Visibility, Files.CreationDate, Files.OwnerUser, Date, BackupsCount 
FROM Files 
    LEFT JOIN (
    SELECT FileGUID, Date, COUNT(*) AS BackupsCount 
    FROM Versions 
    GROUP BY FileGUID 
) Versions ON Files.GUID = Versions.FileGUID 
WHERE Files.ParentFolder = '96251A8B-B2A8-416B-92D7-3509E6A645C7' 
ORDER BY Files.Type DESC, CreationDate ASC 
LIMIT 0, 50) 

-- Find total rows 
SELECT FOUND_ROWS() 

假設這是個好主意(我的意思是做一個查詢與兩個單獨的查詢),如何獲得FOUND_ROWS()以使用此查詢?

回答

1

的想法是正確的,而第二個查詢幾乎是瞬間的。但你有SELECT後添加關鍵字,沒有更多:

SELECT Files.GUID, Files.Name, Files.Type, ... 

成爲

SELECT SQL_CALC_FOUND_ROWS Files.GUID, Files.Name, Files.Type, ... 

然後發現行數將被填充,你就能夠恢復它。

如果你想運行一個單一檢索查詢,但你能執行多個查詢更多,那麼你可以做到這一點(它是兩個查詢):

SELECT COUNT(*) INTO @FOUNDROWS FROM (YOUR_QUERY_WITHOUT_SELECT) AS orig; 

和改變您的加入@FOUNDROWS as foundrows到田間地頭檢索查詢:

SELECT ...YOUR FIELDS..., @FOUNDROWS AS foundrows FROM... 

最後,你可以運行JOIN含有兩個查詢一個查詢:

SELECT ALL_YOUR_FIELDS, counter.FOUND_ROW_NUMBER FROM 
(YOUR_QUERY_WITH_LIMIT) AS limited 
JOIN (SELECT COUNT(*) AS FOUND_ROW_NUMBER FROM YOUR_QUERY) AS counter; 
+0

謝謝,但我仍然需要行**和**總數。我的意思是添加'SELECT SQL_CALC_FOUND_ROWS'沒有顯示總數,當我運行它 – TheDude

+0

不,它不會;它只存儲**計數,那麼你必須在第二個查詢中檢索它。你可以在一個查詢中做到這一點,但它會花費你...我會盡力改進我的答案。 – LSerni

1

查詢應該是這樣的:

SELECT SQL_CALC_FOUND_ROWS Files.GUID, Files.Name, Files.Type, Files.Visibility, Files.CreationDate, Files.OwnerUser, Date, BackupsCount 
FROM Files 
    LEFT JOIN (
    SELECT FileGUID, Date, COUNT(*) AS BackupsCount 
    FROM Versions 
    GROUP BY FileGUID 
) Versions ON Files.GUID = Versions.FileGUID 
WHERE Files.ParentFolder = '96251A8B-B2A8-416B-92D7-3509E6A645C7' 
ORDER BY Files.Type DESC, CreationDate ASC 
LIMIT 0, 50 
+0

感謝,但仍查詢只返回行,而我需要兩排**和**的總數 – TheDude

+0

您可通過執行獲得數:SELECT FOUND_ROWS()之後第一查詢 – Pomyk

0
A very simple example 


"SELECT SUM(final_cost) as final_cost, 
SUM(call_discount) as discount_cost, 
(SELECT COUNT(*) FROM call_records WHERE transaction_type ='call' AND account_id='$account_id' AND time_of_call>='$from' AND time_of_call<='$to') as calls, 
(SELECT COUNT(*) FROM call_records WHERE transaction_type ='text' AND account_id='$account_id' AND time_of_call>='$from' AND time_of_call<='$to') as texts, 
(SELECT COUNT(*) FROM call_records WHERE transaction_type ='appointment' AND account_id='$account_id' AND time_of_call>='$from' AND time_of_call<='$to') as appts 
FROM 
call_records 
WHERE account_id='$account_id' 
AND time_of_call>='$from' 
AND time_of_call<='$to' "