簡體   English   中英

使用左外部聯接選擇多個計數

[英]Selecting multiple counts with left outer join

我有3個表: ProductSharesLikesProductID連接。 我想做的是在一個查詢中選擇所有產品以及這些產品的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM