MySQL - 计算总记录子查询?

时间:2014-02-16 21:31:34

标签: mysql

我目前有一个类似的查询:

SELECT * AS totalCustomers FROM customers LEFT JOIN belongings USING (customer_id) WHERE belonging_id BETWEEN 1 AND 5;

我想知道我是否可以修改它,以便通过将其修改为以下内容来返回表客户中的记录总数:

SELECT *, COUNT(DISTINCT customer_id) AS totalCustomers FROM customers LEFT JOIN belongings USING (customer_id) WHERE belonging_id BETWEEN 1 AND 5;

我计划将总数用于分页,但是希望将其作为查询的一部分,这样我就不必再次调用数据库来获取总数。这是可能的,还有更好的方法吗?

4 个答案:

答案 0 :(得分:0)

对于分页,如果您使用的是LIMIT,则可以使用SQL_CALC_FOUND_ROWS

答案 1 :(得分:0)

我认为更好,更正确的方法是进行第二次查询。如果你想获得总记录数,那么你应该向你的customers表做子查询,但没有“where”指令。如果您在主查询中执行此操作,则子查询将执行与主查询返回的行数相同的次数。

答案 2 :(得分:0)

使用临时表可以解决这种情况。虽然这是第二个查询,但它从昂贵的连接操作中节省了:

CREATE TEMPORARY TABLE TMP
SELECT *, customer_id as tmp_customer_id 
FROM customers LEFT JOIN belongings USING (customer_id) 
WHERE belonging_id BETWEEN 1 AND 5;

您仍然可以从您创建的临时表中获取结果:

SELECT * FROM TMP;

之后您将获得客户数量:

SELECT COUNT(DISTINCT tmp_customer_id) FROM TMP;

答案 3 :(得分:0)

好的,我找到了我现在正在寻找的解决方案。我设法使用子查询来计算customers表中的客户总数:

   SELECT * FROM
      (SELECT COUNT(DISTINCT customer_id) FROM customers AS totalUniqueCustomers ) tmp,
      customers c
   LEFT JOIN
      belongings USING (customer_id)
   WHERE
      belonging_id BETWEEN 1 AND 5;

现在我拥有来自整个客户表的唯一客户总数,但也限制了之后用于加入的记录范围。