使用LIMIT,LEFT JOIN和SQL_CALC_FOUND_ROWS进行MYSQL查询

时间:2011-11-24 19:48:24

标签: mysql

这是我的疑问:

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() 

这不起作用。我得到一列#mismatch。如何修改查询才能工作?

1 个答案:

答案 0 :(得分:0)

您的第一个选择是:

SELECT '0', *

我不知道有多少列'*'(至少3,d.category,d.name,c.category),但是你的第二个查询(在联合之后)应该具有相同的列数。现在,您只在第二个查询中返回两列。

我也在文档中看到,你应该使用UNION ALL而不是UNION,我引用:

  

仅当使用UNION ALL时,FOUND_ROWS()的值才是精确的。如果使用UNION without ALL,则会发生重复删除,并且FOUND_ROWS()的值仅为近似值。