2

这是页面 URL http://domain.com/testphp?id=1&mview=4

选项从名为je_add_choice的表中显示, 其中包含字段名称

  1. 选择ID
  2. poll_id
  3. choice_creator_id
  4. 选择名
  5. 选择图像
  6. 描述
  7. 选择创作时间

它显示了他们对特定民意调查的投票的选择,我想要做的是,我必须按票数显示选择的顺序。但问题是,选择的投票数来自另一个名为je_user_vote 的表,它包含字段

  1. 用户身份
  2. poll_id
  3. 选择ID
  4. vote_id(主键)
  5. 日期时间投票
  6. 用户类型

在投票页面中,我使用了查询

select * from je_addchoice where poll_id='$poll_id'

在此查询中,$pollid 变量是从 url $_GET['id']

我想将查询重写为

select * from je_addchoice where poll_id='$poll_id' // append the code order by count(fieldname) from je_user_vote table.

我已经用过

SELECT *, (
            SELECT count(*) 
            FROM je_uservote T2 
            WHERE T2.pollid=T1.pollID 
            AND T2.choiceid=T1.choiceID) AS votes
FROM je_addchoice T1
ORDER BY votes

但它显示了空白页。任何人都可以帮助我解决这个问题。提前感谢您阅读本文并帮助我解决

4

3 回答 3

2

您只需要左连接和聚合函数来计算投票。您可以在此处查询(未经测试):

"SELECT COUNT(*) AS total_votes, t1.* 
FROM je_add_choice t1
LEFT JOIN je_user_vote t2
    ON t1.choice_id=t2.choice_id
    AND t1.poll_id=t2.Poll_id
WHERE t1.poll_id = " . $poll_id . "
GROUP BY t1.choice_id
ORDER BY 1 ASC"
于 2012-11-28T05:14:27.223 回答
1
SELECT COUNT(t2.choice_id) AS total_votes, t1.* 
    FROM je_addchoice t1
    LEFT JOIN je_user_vote t2
        ON t1.choice_id=t2.choice_id
        AND t1.poll_id=t2.Poll_id
    WHERE t1.poll_id = " . $poll_id . "    
    GROUP BY t1.choice_id
    ORDER BY 1 DESC

这是我的问题的答案。我只是从 subred 的答案中获取编码并根据页面中的要求修改名称,然后我得到了结果。现在工作正常

http://www.domain.com/projects/je/pollpage.php?id=2&mview=4

这是现在以高票数到低票数的顺序显示选项的 URL

于 2012-11-28T06:07:38.880 回答
1
SELECT COUNT(t2.choice_id) AS total_votes, t1.* 
    FROM je_addchoice t1
    LEFT JOIN je_user_vote t2
        ON t1.choice_id=t2.choice_id
        AND t1.poll_id=t2.Poll_id
    WHERE t1.poll_id = " . variable_name . "    
    GROUP BY t1.choice_id
    ORDER BY 1 DESC

希望这可以帮助。

于 2012-11-28T12:39:50.497 回答