2017-11-11 105 views
0

如果你看一下my fiddle,你可以看到,我運行一個查詢,並試圖讓所有匹配行的計數,結果集一起。MySQL的:獲取匹配的所有行的數量,以及與結果集

我想要得到的相匹配的所有行計數,雖然我可能只返回結果集其中的一小部分,因爲我在做分頁與LIMITOFFSET

我的查詢出了什麼問題?

SELECT item.*, COUNT(item.id) AS _count 
FROM item 
JOIN user 
    ON user.username = "Lansana" 
    AND user.deleted_at IS NULL 
JOIN user_item 
    ON user_item.item_id = item.id 
    AND user_item.user_id = user.id 
    AND user_item.deleted_at IS NULL 
WHERE item.deleted_at IS NULL 
GROUP BY item.id 
ORDER BY item.id DESC 

回答

1

您所做的是在聚合查詢中將您的查詢。在大多數數據庫(以及最近的MySQL版本),你會得到一個錯誤 - 因爲select還沒有在group by未聚集列。

沒有group by恰好返回一行全部聚集查詢。

如果你想要的行數,然後用CALC_FOUND_ROWS(記錄here):

SELECT SQL_CALC_FOUND_ROWS item.* 
. . . ; 

然後發出另一個查詢:

SELECT FOUND_ROWS(); 
+0

發現的行,是不是我要找的。我想獲得匹配的所有*行的數量,但是我可能只返回一小部分結果集,因爲我正在用LIMIT和OFFSET分頁。編輯的問題更清楚。 – Lansana

+0

@Lansana。 。 。那麼'SQL_CALC_FOUND_ROWS'就是*你正在尋找的東西。您是否閱讀過文檔? 「第二個SELECT返回一個數字,表示在沒有LIMIT子句的情況下,第一個SELECT將返回多少行。」 –

+0

啊,你是對的!我讀錯了。謝謝一堆! – Lansana

相關問題