0

私のロジックがこれで完全に機能しているかどうかはわかりません。Documents各アイテムの一意のIDとドキュメントの名前を持つテーブルがあります。次に、ドキュメントに対するユーザーの投票を格納する別のテーブルDocVotesがあります(レコードごとに1票)(YESの場合は1、NOの場合は0)フィールドVoteがあります。BOOL

特定のユーザーMemberIDが以前にドキュメントに投票したことがあるかどうかを確認しようとしていますが、明らかに自分のドキュメントに投票することはできません(除外して確認AuthorID

これが私が試しているクエリです

SELECT d.ID, d.Name, COUNT(dv.MemberID) 
FROM Documents AS d
LEFT JOIN DocVotes AS dv ON dv.ItemID=d.ID
    AND dv.MemberID=32
WHERE d.Status =  'Proposed'
    AND d.AuthorID<>32

私がすべきだと思うこと:、、を取得しIDName投票数をカウントしますMemberID(この場合は32)次に、カウントを確認します。カウントが0の場合、ユーザーはまだ投票していないことを意味します。 1そして彼らは持っています(あなたは一度だけ投票することができます)。

しかし、私は6のカウントを取り戻していますが、この特定のドキュメントに対してこのユーザーが投票したのは1票だけです。したがって、明らかにこれはそのエントリよりも多くをカウントしています...(私は1行しか戻っていません)

考え?

4

1 に答える 1

1

コメントで話されたことに注意してください:

使用してみてくださいGROUP BY d.ID

SELECT d.ID, d.Name, COUNT(dv.MemberID) 
FROM Documents AS d
LEFT JOIN DocVotes AS dv ON dv.ItemID=d.ID
    AND dv.MemberID=32
WHERE d.Status =  'Proposed'
    AND d.AuthorID<>32
GROUP BY
    d.ID
于 2013-03-19T05:17:46.720 に答える