2016-01-22 18 views
0

我在那裏我想擁有誰投5箇中收視率,4條,3條,2評級,1個等級的用戶數表我如何可以查詢誰投贊成票,爲星級系統的用戶數量

id user_id question_id rating 
1 1  1   3 
2 2  1   3  
3 3  1   4 

我希望像下面這樣的結果:對於question_id 1

* * * * * (0) 
* * * * (1) 
* * * (2) 
* * (0) 
* (0) 

這是我的代碼:

$con=mysqli_connect("localhost","root","","db"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

mysqli_query($con,"SELECT * FROM `survey_answers`"); 


for($i=5;$i>0;$i--){ 

    for($j=0;$j<$i;$j++){ 

     echo " * "; 

    } 
    echo "<br>"; 

} 
+0

你嘗試過什麼查詢來解決? –

回答

0

這應該是訣竅:

SELECT question_id 
    , rating 
    , COUNT(user_id) voteCount 
    FROM survey_answers 
    GROUP BY question_id, rating 

我假設你得到的所有問題和其各自的票數。而通過設計,用戶每個問題只能投一次。

1

這應該適合你,只需用你想要的任何東西替換表名和問題ID。

SELECT COUNT(*) AS vote_count, rating FROM ratings_table WHERE question_id = ? GROUP BY rating

如果你想一次就可以使用所有的問題

SELECT COUNT(*) AS vote_count, rating FROM ratings_table GROUP BY rating, question_id

0

這可能是解決你的問題愚蠢的辦法。但它可以用純SQL來完成。請試試這個:

select concat(tmp.star,' (',ifnull(cnt,0),')')as ratings from(
    select 1 as rating,'*' as star union all 
    select 2, '**' union all 
    select 3, '***' union all 
    select 4, '****' union all 
    select 5, '*****' 
) tmp 
left join (
    select rating,count(1) cnt 
    from survey_answers 
    where question_id = 1 
    group by question_id,rating 
) as tbl on tbl.rating = tmp.rating 
order by tmp.rating desc 

結果應該是這個樣子的:

ratings 
--------- 
***** (0) 
**** (1) 
*** (2) 
** (0) 
* (0)