2016-04-21 51 views
0

我正在進行選舉系統工作,並且在解決問題時遇到困難。以下是我的應用程序的樣子。 enter image description here通過數據庫字段循環PHP MySQL

目前我通過在我的php文件中多次添加查詢來獲得這些結果。 (例如在RaceID = 9的地方運行,RaceID = 10 .........) 我確定應該有一種方法來讀取RaceID作爲數組或其他方式,並以此方式獲得結果。由於這些是JOIN表,我也在尋找一種檢索RaceName(總統名稱,司法最高法院等)和MainRaceName(紅色,藍色,灰色標題)的方法。我希望我做一些感覺那麼遠, 以下是我對

<!-- MAIN ELECTION TICKET MainID loop should control this --> 
<div class="panel panel-red margin-bottom-40"> 
<div class="panel-heading"> 
    <h2 class="panel-title"> <strong>REPUBLICAN NATIONAL</strong> </h2> 
</div> 

<!-- End then SUB ELECTION TICKET RaceID loop should control this section--> 
<h3 style="background-color:#f5f5f5; margin:30px; padding:5px; font-weight:Bold ">Presidential Race </h3> 


<!-- Finally Results section ELECTION RESULTS --> 
<table class="table table-hover"> 
    <thead> 
    <tr> 
     <th></th> 
     <th>Candidate</th> 
     <th>Votes</th> 
     <th>%</th> 
    </tr> 
    <!-- This area gets the sum of the votes for a specific RaceID --> 
    <?php 
    $result = mysql_query('SELECT SUM(CandidateVotes) AS value_sum FROM candidates WHERE RaceID =9'); 
    $row = mysql_fetch_assoc($result); 
    $sum = $row['value_sum']; 
    ?> 
    </thead> 
    <tbody> 
    <?php 
    $query = "SELECT candidates.CandidateName, candidates.CandidateVotes, candidates.Party, mainrace.MainRaceName, race.RaceName, candidates.win 
             FROM candidates 
             JOIN race ON race.RaceID = candidates.RaceID 
             JOIN mainrace ON mainrace.MainID = candidates.MainID 
             WHERE candidates.RaceID = 9"; 

    $result = mysql_query($query) or die(mysql_error()); 
    for($i=0; $row = mysql_fetch_array($result); $i++){ 
     ?> 

     <tr> 
      <!--Show winner Icon if the win field is selected as 1 from database --> 
      <td width="5px"> 
       <?php if ($row['win']==1) 
       { 

        echo "<span class=\"glyphicon glyphicon-check\"></span>"; 
       } 

       else 
       { 
        echo "<span class=\"glyphicon glyphicon-unchecked\" style=\"color:#cccccc\"></span>"; 
       } 
       ?> 


      </td> 

      <td><?php if ($row['win']==1){ 
        echo "<strong>"; 
        echo $row['CandidateName']; 
        echo "</strong>"; 
       } 
       else { 
        echo $row['CandidateName']; 
       } 

       ?> 
      </td> 

      <td width="20%"><?php echo $row['CandidateVotes']; ?></td> 
      <td width="30%"><?php 
       if ($row['CandidateVotes']>0){ 
        echo number_format((float)(($row['CandidateVotes']/$sum)*100), 2, '.', ''). ' %'; 
       } 

       else{ 
        echo "N/A"; 
       } 
       ?> 
      </td> 

     </tr> 
     <?php 
    } 
    ?> 

    <tr> 
     <td></td> 
     <td><strong>Total Votes:</strong></td> 
     <td><strong><?php echo $sum ?></strong></td> 
     <td></td> 
    </tr> 

    </tbody> 

</table> 

我真的很感激,如果你能提供一些樣品(環路)我怎麼能解決這個問題的代碼。非常感謝您的幫助。此致

+0

[小博](http://bobby-tables.com/)說:[你的腳本是在對SQL注入攻擊的風險。(HTTP://計算器.COM /問題/ 60174 /何燦I-防止-SQL注入式的PHP)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

+1

請[停止使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 [這些擴展](http://php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7中刪除。瞭解[編寫]​​(http://en.wikipedia.org/ wiki/Prepared_statement)語句[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli.quickstart .prepared-statements.php)並考慮使用PDO,[這真的很簡單](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

感謝您的建議,我會將我的代碼更改爲PDO。 – CyberFla

回答

1

您應該能夠在一個查詢中提取所需的所有內容。

爲了總結候選人的選票,你需要確保你的候選人名字是GROUP BY

嘗試是這樣的:

SELECT 
    SUM(candidates.CandidateVotes) AS value_sum, 
    candidates.CandidateName, 
    candidates.Party, 
    mainrace.MainRaceName, 
    race.RaceName, 
    candidates.win 
FROM candidates 
JOIN race 
    ON race.RaceID = candidates.RaceID 
JOIN mainrace 
    ON mainrace.MainID = candidates.MainID 
WHERE candidates.RaceID = :raceId 
GROUP BY candidates.CandidateName 
+0

謝謝大衛。我會嘗試這個查詢並查看結果。這說得通。 – CyberFla