1

私はポーリングシステムを構築しています.現在、すべての投票を選択し、各投票のすべての投票をカウントするクエリがあります(別のテーブルにあります)。したがって、私のテーブルは次のようになります。

Polls:  
ID  
Title  
Body

Votes:  
ID  
PollID  
Vote  (This value is either 0 or 1)

投票の合計は機能しているように見えますが、問題は現在 1 つのレコードしか表示されていないことです。

現在、私のクエリは次のようになります。

SELECT POLLS.ID, 
       POLLS.TITLE, 
       POLLS.BODY, 
       Sum(CASE 
             WHEN VOTES.VOTE = 1 
                  AND VOTES.POLLID = POLLS.ID THEN 1 
             ELSE 0 
           END) AS yay, 
       Sum(CASE 
             WHEN VOTES.VOTE = 0 
                  AND VOTES.POLLID = POLLS.ID THEN 1 
             ELSE 0 
           END) AS nay, 
       FROM     polls, 
       VOTES 
ORDER  BY POLLS.ID 

また、Codeigniter で PHP を使用しています。

4

4 に答える 4

1
SELECT polls.ID,polls.title,polls.body,
  SUM(case when votes.vote = 1 then 1 else 0 end) AS yay,
  SUM(case when votes.vote = 0 then 1 else 0 end) AS nay,
FROM polls 
JOIN votes ON polls.ID = votes.pollID
  GROUP BY poll.ID, polls.title, polls.body
  ORDER BY polls.ID
于 2012-10-16T15:35:33.133 に答える
0

私は一緒に行きます:

    SELECT polls.ID, polls.title, polls.body,
    SUM(IF(votes.vote = 1, 1, 0)) AS yay, 
    SUM(IF(votes.vote = 0, 1, 0)) AS nay
    FROM polls
    JOIN votes ON (votes.pollID = polls.ID)
    GROUP BY ID, title, body
于 2012-10-16T15:36:52.890 に答える
0

次の表GROUP BY pollIDの値が必要です。votes

SELECT p.ID, p.title, p.body, v.yay, v.nay
FROM
(
    SELECT PollID,
      SUM(CASE WHEN vote = 1 THEN 1 ELSE 0 END) AS yay,
      SUM(CASE WHEN vote = 0 THEN 1 ELSE 0 END) AS nay,
    FROM votes
    GROUP BY PollID
) v
INNER JOIN Polls p ON v.PollID = p.Id
ORDER BY p.ID
于 2012-10-16T15:33:00.377 に答える
0

不足しているのは " GROUP BY" です。GROUP BY PollID合計を取りながら使用します。

于 2012-10-16T15:48:00.280 に答える