簡體   English   中英

在MySQL查詢中將SELECT與LIMIT一起使用時,如何計算所有行?

[英]How to count all rows when using SELECT with LIMIT in MySQL query?

我有這樣的mysql查詢:

SELECT A.ID, A.NAME, B.ID, B.NAME
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
    cond1, cond2, ..., condN
LIMIT 10

我在查詢中有很多where子句。 如何改進此查詢以獲取完整的行數? 沒有LIMIT我不想再使用一個請求。

您正在尋找的是這個

SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
  cond1, cond2, ..., condN
LIMIT 10

SELECT FOUND_ROWS();

您可以將SQL_CALC_FOUND_ROWS與FOUND_ROWS()一起使用,以計算執行該查詢時的結果數。 基本上,您只需在“ SELECT”之后添加“ SQL_CALC_FOUND_ROWS”,然后再運行另一個查詢“ SELECT FOUND_ROWS()”。 無法在同一查詢中發回計數,因為在查詢結束之前它無法知道計數。

自上次回答以來已有4年,但這是我解決問題的方式。 盡管SaltLake的答案給我帶來了錯誤,但確實帶我找到了正確的答案。

SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION 
SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL
ORDER BY IssueDate, VolumeNo 

UNION部分非常重要,因為它將在第二選擇結果中檢索到的所需答案(總行數)標記到第一選擇結果中。

另一個非常重要的一點是,因為正在發生UNION,所以兩個表中的列數必須相同。 這通常意味着您必須用所有重要的FOUND_ROWS()值填充SECOND Select,然后填充許多NULL值。

最終結果將是一個命令,該命令將返回11行信息,這些行之一包含行的總數。 顯然,在使用結果時,您將需要排除額外的TotalRows行。

來自http://is.php.net/manual/zh/function.mysql-num-rows.php#83647的解決方案

SELECT SQL_CALC_FOUND_ROWS 
    '0', z.id
FROM 
    zoom AS z 
LIMIT 0,6 
UNION 
  SELECT 
    '1', FOUND_ROWS() 
ORDER BY `0` DESC , RAND()

你應該用

SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME, FOUND_ROWS() as rCount
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
    cond1, cond2, ..., condN
LIMIT 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM