结合SQL查询以简化和提高性能

时间:2009-12-04 12:23:04

标签: mysql performance

我正在尝试合并一些SQL查询以减少执行的查询数量,并希望同时提高性能。

我有很多产品,分为几类。有些产品有为他们编写的文章(但大多数都没有)。目前我获取类别的所有产品...

// * used here to keep things simple
SELECT * FROM products WHERE iCategory=23;

然后,对于结果列表中的每个产品,我正在执行此类附加查询...

SELECT COUNT(*) FROM articlelinks WHERE iProduct=xxx;

如果有一件或多件商品,我可以在旁边放一个小图标。

我可以将这些组合成一个查询,让我计算每个产品,包括计数为零的产品。我的所有尝试都会产生一个列表,其中只包含带有文章的产品。

我正在使用MySql和PHP。

3 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情

SELECT iProduct, COUNT(articlelinks.iArticle)
FROM products LEFT JOIN
  articlelinks ON products.iProduct = articlelinks.iProduct
WHERE iCategory=23
GROUP BY iProduct

答案 1 :(得分:1)

您可以使用 (scalar) subquery来获取每个“群组”的计数。

SELECT
  *,
  (
    SELECT
      COUNT(*)
    FROM
      articlelinks
    WHERE
      articlelinks.iProduct=products.iProduct
  ) as c
FROM
  products
WHERE
  iCategory=23

答案 2 :(得分:1)

您可以使用这样的select语句:

Select iProduct,  
[other cols],    
(select count(*) from articlelinks where iProduct = products.iProduct) as articles  
from products   
WHERE iCategory=23;

这应该总是给你一个文章计数,即使它是零