0

で接続されているProductSharesの3 つのテーブルがあります。私がやりたいことは、1 つのクエリですべての製品とこれらの製品を選択することです。LikesProductIDCOUNT(shares)COUNT(likes)

まず、たった1つのクエリでそれを行うことは可能ですか? 可能ならどうすればいいですか?そして最も重要なことは、すべての製品を選択して表示し、ユーザーが Ajax 呼び出しを行ってデータを共有することにカーソルを合わせたときに表示する必要があるかどうかです。前もって感謝します。

4

3 に答える 3

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つの共有が複数回カウントされるため(逆も同様)、そこにある必要があります。

于 2013-04-20T13:22:38.090 に答える
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
于 2013-04-20T13:31:38.367 に答える
0

1 つのクエリで実行できます。私の頭のてっぺんから

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)

ただし、パフォーマンスを見てください。インデックスなどがあることを確認してください

于 2013-04-20T13:25:40.003 に答える