2011-11-24 134 views
0

這裏是我的查詢:與LIMIT MySQL查詢,LEFT JOIN和SQL_CALC_FOUND_ROWS

SELECT * 
    FROM designs AS d 
    LEFT JOIN categories AS c 
     ON d.category = c.category 
    GROUP BY d.name ASC LIMIT 0, 10 

我想返回找到沒有適當的限制條件的行數。這是我的思路:

SELECT SQL_CALC_FOUND_ROWS '0', * 
    FROM designs AS d 
    LEFT JOIN categories AS c 
     ON d.category = c.category 
    GROUP BY d.name ASC LIMIT 0, 10 
UNION 
SELECT '1', FOUND_ROWS() 

這是行不通的。我得到一個列#不匹配。我將如何修改查詢的工作?

回答

0

你的第一選擇,是:

SELECT '0', * 

我不知道有多少列 '*' 是(至少3,d.category,d.name,c.category),但你的第二個查詢(聯合之後)應該具有相同的列數。現在,您只能在第二個查詢中返回兩列。

我的文檔中也看到了,你應該使用UNION ALL而不是UNION的,我引用:

FOUND_ROWS的值()是準確的,只有在使用UNION ALL。如果UNION沒有ALL,則會發生重複刪除,並且FOUND_ROWS()的值僅爲近似值。

+0

是的,這是我的問題(在第二個查詢中返回的列較少),但我不知道如何使列匹配或找到另一個查詢解決方案,從而得到沒有「限制」的所有行的計數「考慮在內。我總是可以運行2個查詢,但認爲可能有更優雅的方式。 – MarkL

+0

只需在第二個查詢中添加更多列:SELECT'1',FOUND_ROWS(),NULL,NULL,NULL,...,NULL。另外,在我看來,最好總是定義從數據庫中檢索的列,而不是使用星號(*) –