Mysql顺序通过另一个表的字段名称计数

时间:2012-11-28 05:02:46

标签: php mysql

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

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

  1. choice_id
  2. poll_id
  3. choice_creator_id
  4. CHOICE_NAME
  5. choice_image
  6. 描述
  7. Choicecreationtime
  8. 它显示了对特定民意调查的投票选择,我想要做的是,我必须通过选票显示选择顺序。但问题是,选择的投票计数来自另一个名为 je_user_vote 的表 它包含字段

    1. USER_ID
    2. Poll_id
    3. choice_id
    4. vote_id(主键)
    5. datetime_voted
    6. 的用户类型
    7. 在投票页面中,我使用了查询

      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
      

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

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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,现在按照高计数投票到低计数投票的顺序显示选项

答案 2 :(得分: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

希望这有帮助。