2016-05-18 26 views
-2

私のクエリから結果が得られていますが、入れ子にされたループの作業をしていないようです。ここに私が何をしようとしているのかを説明するのに役立つイメージがあります。 enter image description here入れ子ループPHP MySQLの結果

これは私が達成しようとしているものです。

enter image description here

後、私は困難

<?php 
$query = "SELECT CandidateName, CandidateVotes, Party, MainRaceName, RaceName, win 
FROM candidates 
WHERE RaceID = $RaceID"; 

    $result = mysql_query($query) or die(mysql_error()); 
    for($i=0; $row = mysql_fetch_array($result); $i++){ 
    ?> 
     <!-- FOR LOOP 1 SHOW MainRaceName --> 
     { 
     <h1><?php echo $row['MainRaceName']; ?></h1> 


        <!-- FOR LOOP 2 SHOW RaceName --> 
       { 
       <h1><?php echo $row['RaceName']; ?></h1> 


        { 

        <h1><?php echo $row['CandidateName']; ?></h1> 
        <h1><?php echo $row['CandidateVote']; ?></h1> 
        . 
        . 

        } 

       } 
    }  



    <?php 
    } 
    ?> 

を持っていますどこに簡単な解決策があるかもしれないと私はあなたの時間と助けに感謝です。 私はコードをPDOに変更する作業をしており、SQLインジェクションに関連するリスクを認識しています。

+1

、すべてのことのスタイルをテーブルに置くことができます。それは何をすべきか、代わりに何をしていますか? – Barmar

+0

なぜあなたはそれを使用しない場合、そのコードのトラブルシューティングをしていますか?すべての 'mysql_ *'関数は何年にもわたって非難されており、10年以上の選択肢があります。 PDOに移動します。 – miken32

+0

バーマー私は知っている。それが私の助けが必要な場所です。私は助けが必要な場所を示すために別のイメージを追加しました。ネストされたステートメントの代わりに他のソリューションがあるかもしれません。ありがとう – CyberFla

答えて

1

RaceNameを照会している場合は、これが必要です。

<?php 
$query = "SELECT CandidateName, CandidateVotes, Party, MainRaceName, RaceName, win 
FROM candidates 
WHERE RaceID = $RaceID"; 

$result = mysql_query($query) or die(mysql_error()); 
for ($i = 0; $row = mysql_fetch_array($result), $i++) { 
    // Print out main race name and race name on first iteration only 
    if ($i === 0) { 
?> 
     <h1><?php echo $row['MainRaceName'] ?></h1> 
     <h1><?php echo $row['RaceName'] ?></h1> 
<?php 
    } 
?> 
    <p><?php echo $row['CandidateName'] ?></p> 
    <p><?php echo $row['CandidateVotes'] ?></p> 
<?php 
} 
?> 

あなたがMainRaceNameを照会していて、メインのレースの下にすべてのレースをプリントアウトする必要がある場合は、私が一緒に候補者を持つグループのレース名をだろうし、このような具体的なレース名の合計候補の票を取得します。あなたの写真から

<?php 
$query = "SELECT CandidateName, CandidateVotes, Party, MainRaceName, RaceName, win 
FROM candidates 
WHERE RaceID = $RaceID"; 

$result = mysql_query($query) or die(mysql_error()); 

$grouped_result = array(); 
$total_votes = 0; 
$main_race = ''; 

for ($i = 0; $row = mysql_fetch_array($result), $i++) { 
    // If it is first iteration, set the current race name to race name in row 
    // and save main race name 
    if ($i === 0) { 
     $main_race = $row['MainRaceName']; 
     $cur_race = $row['RaceName']; 
    } 
    // If current race name is different than race name in row we reset 
    // total count of votes, since we need to have sum of votes grouped by race name 
    if ($cur_race != $row['RaceName']) { 
     $total_votes = 0; 
    }  
    // Populate grouped array 
    $grouped_result[$row['RaceName']]['candidates'][] = array(
     'name' => $row['CandidateName'], 
     'votes' => $row['CandidateVote'] 
    ); 
    $grouped_result[$row['RaceName']]['total_votes'] = $total_votes + $row['CandidateVotes'];; 
} 

$grouped_resultあなたにこのようなネストされた配列の何かを与えるだろう。

array(
    'President' => array(
     'candidates' => array(
      0 => array(
       'name' => 'Mr. X', 
       'votes' => 429 
      ), 
      1 => array(
       'name' => 'Ms. Y', 
       'votes' => 43 
      ), 
        . 
        . 
        . 
     ), 
     'total_votes' => 5247 
    ), 
    'US House of ...' => array(
     'candidates' => array(
      0 => array(
       'name' => 'whatever_his_name_is', 
       'votes' => 3693 
      )   
     ) 
     'total_votes' => 3693 
    ) 
) 

これで、htmlを印刷することができます。

<h1><?php echo $main_race ?></h1> 
<?php 
    // loop through all races 
    foreach ($grouped_result as $racename => $data): 
?> 
     <h1><?php echo $racename ?></h1> 
    <?php 
     // loop through all candidates in this race 
     foreach ($data['candidates'] as $candidate): 
    ?> 
      <p><?php echo $candidate['name'] ?></p> 
      <p><?php echo $candidate['votes'] ?></p> 
      <!-- Calculate vote percentages --> 
      <p><?php echo ($candidate['votes']/$data['total_votes']) * 100 ?> %</p> 
    <?php 
     endforeach; 
    ?> 
     <h1>Total votes: <?php echo $data['total_votes'] ?></h1> 
<?php 
    endforeach; 
?> 

今、あなたはあなたのコードにはネストされたループはありませんどんな...

+1

'for'ループの2番目の部分は回数である必要はありません。条件として使用できる任意の式を指定できます。 '$ row'への代入は' while'と同様に 'for'でも同様に動作します。 – Barmar

+0

@Barmar私は決してforループを使っていませんでした。あなたは毎日何か新しいことを学ぶと思います。 – TheDrot

+0

あなたのコードは、何かに '$ i'変数を使用していないので、もっと慣れています。 – Barmar