MySQL - 从同一个表中获取计数

时间:2013-11-29 11:59:34

标签: mysql

我正在使用以下查询:

SELECT tProducts.intProductId, tProducts.strSKU, tProducts.strProductName,
    (SELECT count(*) 
         FROM tProducts as tProductOptions 
            WHERE tProductOptions.bolDeleted = 0 
                  AND tProductOptions.intOptionId = tProducts.intProductId)
    FROM tProducts
    WHERE bolDeleted = 0 
          AND intOptionId = 0

该表将intProductId作为整数,strSKU& strProductName as varchar和intProductId,作为一个整数,如果该行代表产品的选项,则返回intProductId。 (这不是我的架构!)

我正在尝试获取每个产品和选项数量。

它起作用并给出我期望的结果,但是当有大量数据时它很慢。

我已经添加了相关索引,但我确信必须有更好的方法来做到这一点......我只是看不到它!

(另外,我正在尝试将此查询放入Laravel Fluent中 - 但最佳选择似乎是原始的。我在这里也遗漏了一些东西吗?) 感谢

1 个答案:

答案 0 :(得分:1)

尝试使用JOIN而不是依赖子查询重写查询 它可能会更快(但不能保证)。

SELECT t.intProductId, t.strSKU, t.strProductName, q.cnt
FROM tProducts t
LEFT JOIN (
    SELECT intOptionId, count(*)  cnt
    FROM tProducts as tProductOptions 
    WHERE tProductOptions.bolDeleted = 0 
    GROUP BY intOptionId
) q
ON t.intProductId = q.intOptionId
WHERE t.bolDeleted = 0 
  AND t.intOptionId = 0