2011-12-11 35 views
0

すべての製品の詳細を含む製品テーブルがあります。異なる製品が投票できる人気のあるテーブルに製品をノミネートすることができます。私は登録ユーザーの投票だけを数える必要があります。現在、特定の製品が持つすべての投票を数えています。どのように私はこの問題を克服するのですか?複数のテーブルからのSQLカウントと結合

SELECT popular.name, popular.product_id, product.text, product.author, count(  vote.product_id) AS votes 
FROM popular 
LEFT JOIN product ON (product.id = popular.product_id) 
LEFT JOIN vote ON (vote.product_id = popular.product_id) 
where popular.hidden = '1' and 
popular.name in (select registered.name from registered 
where registered.course_id='".$course_id."' and 
registered.section = '".$section."' and 
registered.term = '".$term."') 
GROUP BY popular.product_id 
ORDER BY votes DESC Limit 10 

答えて

0

あなたはこのクエリはありません有する生成物を返さないことを投票して、他のテーブル

Select P.ID, P.text, count(v.Product_ID) as votes 
FROM Product PRO 
LEFT JOIN Popular Pop 
    ON PRO.ID = Pop.Product_ID 
LEFT JOIN VOTE V --<-- This is missing 
    on V.Product_ID = Pro.ID 
Group by P.ID, Pro.Text 
order by votes Desc 
+0

これを少し修正する必要があります。私は登録ユーザーだけが投票をカウントする必要がありますが、一般的な製品は誰でも投票できます。それ、どうやったら出来るの? – codingNewbie

0
 
SELECT pop.product_id, pd.text, count(vt.product_id) AS votes 
FROM popular pop 
LEFT JOIN product pd ON(pd.product = pop.product_id) 
LEFT JOIN vote vt ON(vt.product_id = pop.product_id) 
WHERE 1 = 1 // or pop.product_id = yourProductId here 
GROUP BY pop.product.id 
ORDER BY vt.votes DESC 

+0

soooたくさんありがとう! :D:D – codingNewbie

+0

これを少し修正する必要があります。私は登録ユーザーだけが投票をカウントする必要がありますが、一般的な製品は誰でも投票できます。それ、どうやったら出来るの? – codingNewbie

0
SELECT popular.product_id, product.text, count(vote.product_id) AS votes 
FROM popular, product, vote 
WHERE product.id = popular.product_id AND product.id = vote.product_id 
GROUP BY product.id 
ORDER BY votes DESC 

注間の結合を逃している:私は以下の私のSQLコード貼り付けています投票。あなたのDBにこのようなレコードがある場合、LEFT JOINvoteテーブルが必要です。

関連する問題