我有3个表:Product
,Shares
,Likes
,它们由ProductID
连接。我想要做的是在一个查询中选择所有产品以及这些产品的COUNT(shares)
和COUNT(likes)
。
首先,可以只使用一个查询吗?如果可能的话我该怎么办?最重要的是,我应该选择所有产品并显示当用户悬停在Ajax上调用并获得并分享数据时?提前致谢。
答案 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