2016-12-07 48 views
1

我運行一個PHP腳本到池保存到數據庫 我的MySQL看起來像這樣PHP MySQL的池秀最高表決票數

ID QUESTION_1 
1  1 or 2 or 3 (according to the chosen option value in number) 

如果我在QUESTION_1投我可以投票選擇1或2或3而選擇的值的數量保存在MySQL作爲數字1或2或3

我需要什麼

如果多數人投票選擇2比方說348次,排在第二位的人chosed選項3 208投票和第三名來選項3與87票我需要顯示:

Option 2 winner with 348 votes 
Option 3 with 208 votes 
option 2 with 87 votes 

我們展示了冠軍,多少票?

我試圖做到這一點像這樣

$r['total']=0; 
foreach(array(1,2,3) as $QUESTION_1){ 
    $res=mysqli_query($datacenter, "SELECT COUNT(QUESTION_1) AS `total` 
            FROM `votes` WHERE `QUESTION_1` = '$QUESTION_1' "); 
    $tmp=mysqli_fetch_assoc($res); 
    $r=max($tmp['total'],$r['total']); 
} 


echo number_format($r,0,',','.'); 

但我是新來的PHP所以任何幫助是值得歡迎

任何想法如何做到這一點?

+2

看起來像一個家庭作業。你在上什麼課?用簡單的英語(而不是代碼),你認爲你應該如何繼續。按步驟排列。有些地方你的問題沒有意義?看看'echo'代碼片段。選項#1發生了什麼?爲什麼選項#2列出兩次? – zipzit

+0

顯示您的表格結構以及您想要達到的目標。 –

+0

我編輯了這個問題,現在很容易理解它 – caradevineros

回答

1

你不需要很多代碼是,答案是隻要我試圖解釋每一件事情,但代碼是短

這是你讀的評論非常重要的,首先看一下我的數據庫圖片enter image description here

,你可以這裏的人選擇選項2,三次

他們選擇選項1,兩次

,比次看安永選擇選項3只次,

所以選項2是贏家3票,選項1是在第二位,2票和期權3在第三位,一票

讓你的顯示器看起來應該這樣

選項1個贏家3票

選項2 2票

選項3 1票

如果我是正確的,直至現在,繼續讀下去,其他明智附上你的數據庫的照片,你的問題,並讓我知道,

解決方案 - 你不需要太多的代碼要做到這一點,只需使用向下跌破

$res = mysqli_query($datacenter,"SELECT *, COUNT(QUESTION_1) as total FROM 
    `votes` GROUP BY QUESTION_1 ORDER BY total DESC"); 
    $declration = ['winner with','with','with']; 
    $i=0; // you dont need this line, but if you dont need this it will show you 
// the index error but your code will work fine 
    while ($row = mysqli_fetch_assoc($res)) { 
      echo 'option '.'    '. $row['QUESTION_1'].'    '. 
    $declration[$i++].'    '. $row['total']. '    '. 
    'votes<br>'; 

    } 

解釋碼 - 第一次查詢的解釋

SELECT *, COUNT(QUESTION_1) as total FROM `votes` GROUP BY QUESTION_1 ORDER BY total DESC 

什麼查詢簡單地說,塞萊每個事物和計數number question_1都在重複它自己,並按重複值的順序排列它們,最後我要說的是,通過總DESC命令它們,如果我沒有命令它們,它很好,但比我必須排序結果,所以這就是爲什麼我現在訂購他們。

如果運行在本地主機這個查詢,你將得到的結果是這樣 enter image description here

,你可以在我們的結果是很好的排序,所以纔想到現在我們必須對我們的顯示信息的工作。

我使用的陣列來顯示結果

做顯示的結果,而不是鍵入他們顯然我使用的陣列,declration

$declration = ['winner with','with','with']; 

我使用陣列的原因,因爲它使我的工作更容易,因爲您可以看到第一個值爲winner with,比第二個值爲with還有第三個值爲with,嘗試更改第二個和第三個值,有些參數如亞軍或第三名,並且您的顯示器將會也改變。

現在的抓取和顯示

echo 'option '.' &nbsp;&nbsp; '. $row['QUESTION_1'].' &nbsp;&nbsp; '. $declration[$i++].' &nbsp;&nbsp; '. $row['total']. ' &nbsp;&nbsp; '. 'votes<br>'; 

我使用&nbsp;只是爲了創造另一個空間,你們休息會明白,如果你不明白,這是什麼部分是做$declration[$i++],變化值我們原來$declration數組,你就能明白,

,這消息是真的很重要,你的代碼是vunrable SQL注入,請做一個reasearch或觀看錄象,

任何困惑讓我知道

+1

非常詳細和完美的答案 – caradevineros