我正在尝试合并一些SQL查询以减少执行的查询数量,并希望同时提高性能。
我有很多产品,分为几类。有些产品有为他们编写的文章(但大多数都没有)。目前我获取类别的所有产品...
// * used here to keep things simple
SELECT * FROM products WHERE iCategory=23;
然后,对于结果列表中的每个产品,我正在执行此类附加查询...
SELECT COUNT(*) FROM articlelinks WHERE iProduct=xxx;
如果有一件或多件商品,我可以在旁边放一个小图标。
我可以将这些组合成一个查询,让我计算每个产品,包括计数为零的产品。我的所有尝试都会产生一个列表,其中只包含带有文章的产品。
我正在使用MySql和PHP。
答案 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;
这应该总是给你一个文章计数,即使它是零