具有LIMIT、LEFT JOIN和SQL\u CALC\u FOUND\u行的MYSQL查询

具有LIMIT、LEFT JOIN和SQL\u CALC\u FOUND\u行的MYSQL查询,mysql,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

我的问题是:

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

这不管用。我得到一个列不匹配。如何修改查询才能工作?

您的第一个选择是:

SELECT '0', *
我不知道有多少列“*”至少是3,d.category,d.name,c.category,但是联合后的第二个查询应该有相同数量的列。现在,在第二个查询中只返回两列

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

仅当使用UNION ALL时,找到的_行的值才是精确的。如果使用UNION WITH ALL,则会发生重复删除,并且找到的行的值仅为近似值


是的,这是我在第二次查询中返回较少列的问题,但我不知道如何使列匹配或找到另一个1查询解决方案,从而可以在不考虑限制的情况下获得所有行的计数。我总是可以运行2个查询,但我认为可能有更优雅的方法。只需在第二个查询中添加更多列:选择“1”,找到行,NULL,NULL,NULL,…,NULL。此外,在我看来,最好总是定义从数据库检索的列,而不是使用星号*