2009-07-06 13 views
1

私はユーザーID、オブジェクトID、およびスコア(+1または-1)を格納する評価のテーブルを持っています。さて、私はオブジェクトのリストを合計スコア、+1票の数、-1票の数で表示したいとき。評価のデータベースを最適に照会していますか?

どのようにすれば効率的に行うことができますか?(スコア= +/1 AND object_id = ..)からSELECT COUNT(*)を評価する必要はありませんか?これは表示されるオブジェクトごとに2つのクエリですが、これは受け入れられません。データベース設計は合理的ですか?

+0

何データベースを? –

+0

デザインを判断するためには、デザインにいくつかの要件が必要です。簡単な作業のために、簡単な解決策があるので、設計は問題ありません。 –

+0

MySQL 5.1を使用します。 – PBJ

答えて

1

それは合理的な設計のあなたの質問に対処していませんが、ここではあなたに一度に両方のカウントを取得クエリです:おそらくそのような何かを

select 
    sum(case when score = 1 then 1 else 0 end) 'positive' 
, sum(case when score = -1 then 1 else 0 end) 'negative' 
, objectId 
from 
    ratings 
where 
    objectId = @objectId ... 
group by 
    objectId 
0
select object_id, 
     sum(case when score = 1 then 1 else 0) upvotes, 
     sum(case when score = -1 then -1 else 0) downvotes, 
     sum(score) 
from ratings 
group by object_id 

が。

+0

(あなたもselectでobject_idが必要です) –

+0

(これはなんですか、ありがとう、親切な先生。これは編集されています。この質問への正しい答えは正しいです。正しくリコールする。) – glasnt

0

これはそれを行う必要があります。

SELECT 
    UserID, ObjectID, 
    SUM(CASE WHEN score=1 Then 1 Else 0 End) as UpVotes, 
    SUM(CASE WHEN score=-1 Then 1 Else 0 End) as DownVotes, 
FROM YourTable 
GROUP BY UserID, ObjectID 
関連する問題