[英]Selecting multiple counts with left outer join
我有3個表: Product
, Shares
, Likes
由ProductID
連接。 我想做的是在一個查詢中選擇所有產品以及這些產品的COUNT(shares)
和COUNT(likes)
。
首先,可以只執行一個查詢嗎? 如果可能的話我該怎么辦? 最重要的是,當用戶將鼠標懸停在其上進行Ajax呼叫並獲得喜歡並共享數據時,我應該選擇所有產品並進行顯示嗎? 提前致謝。
干得好:
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
將處理沒有共享或點IFNULL
情況; DISTINCT
應該在那兒,否則與喜歡一起加入時,一份額將被計算多次(反之亦然)。
可以對一個查詢執行此操作。 在我的頭頂上像
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)
不過要注意性能。 確保您有索引等
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.