使用左外连接选择多个计数

时间:2013-04-20 13:18:01

标签: php mysql ajax

我有3个表:ProductSharesLikes,它们由ProductID连接。我想要做的是在一个查询中选择所有产品以及这些产品的COUNT(shares)COUNT(likes)

首先,可以只使用一个查询吗?如果可能的话我该怎么办?最重要的是,我应该选择所有产品并显示当用户悬停在Ajax上调用并获得并分享数据时?提前致谢。

3 个答案:

答案 0 :(得分:3)

你走了:

SELECT
    p.id AS 'product id',
    IFNULL(COUNT(DISTINCT s.id), 0) AS 'total shares',
    IFNULL(COUNT(DISTINCT l.id), 0) AS 'total likes'
FROM
    products p
    LEFT JOIN shares s ON s.product_id = p.id
    LEFT JOIN likes l ON l.product_id = p.id
GROUP BY p.id

IFNULL会在没有股票或喜欢的情况下处理案件; DISTINCT应该在那里,因为否则当与喜欢加入时,一个共享将被计数多次(反之亦然)。

答案 1 :(得分:0)

可以在一个查询中执行此操作。我最喜欢的是

SELECT 
   product_id,
   COUNT(likes.product_id) as likes, 
   COUNT(SELECT share_id FROM shares WHERE product_id = p.product_id) as shares
FROM product p 
LEFT JOIN likes USING(product_id)

虽然看表演。确保你有索引等

答案 2 :(得分:0)

SELECT 
    p.ProductID,
    COUNT(s.ProductID) AS SharesCount,
    COUNT(l.ProductID) AS LikesCount
FROM
    Products p LEFT JOIN Shares s 
        ON P.ProductID = s.ProductID
    LEFT JOIN likes l 
        ON P.ProductID = l.ProductID

GROUP BY p.ProductID