2016-09-30 5 views
2

Есть две таблицы. Одна таблица содержит информацию о игроке, такую ​​как имя и ранг. Другая таблица содержит информацию о замене игры.Как сгладить результаты MySQL

Вывод должен выглядеть следующим образом:

Rank| Player Name | Period 1 position | Period 2 Position| Period 3 Position | 

Таблица игрока Пример

|ID| Name | Rank | 
|1 | Fred | 10  | 
|2 | Dan | 12  | 
|3 | Mike | 15  | 

образец установки Таблица

|ID| Game_ID | Player_ID | Period | Position  | 
|1 | 12  | 1   | 1  | Striker Right| 
|2 | 12  | 1   | 2  | Mid Center | 
|3 | 12  | 2   | 1  | Striker Left | 

Ниже приведен код, чтобы получить его из MySQL

Я пробовал различные способы преобразования возвращаемого набора данных.

$players_sql = "SELECT position.id as position_id, 
player.rank, 
player.first_name, 
position.period, 
position.position 
FROM player 
INNER JOIN position 
on player.id = position.player_id 
ORDER BY player.rank, position.period;"; 

if ($result = $mysqli->query($players_sql)) { 
// printf("Select returned %d rows.\n", mysqli_num_rows($result)); 
/* fetch associative array */ 
while ($row = $result->fetch_assoc()) { 
    $subs[$row["position_id"]] = [ 
     "rank" => $row["rank"], 
     "first_name" => $row["first_name"], 
     "period" => $row["period"], 
     "position" => $row["position"] 
    ]; 
} 
mysqli_free_result($result); 
} 

// collapse players This works 
foreach ($subs as $sub) { 
    $players_by_rank[$sub["rank"]] = $sub["first_name"]; 
} 

Позже данные передаются в форме, которую пользователь может отправить. Код ниже НЕ соответствует указанному выше коду. В приведенном ниже коде использовались статические определенные массивы с предварительно заполненными данными, которые не поступали из базы данных. Это дает возможность визуализировать то, что должно быть результатом. В приведенном ниже примере кода имеется в общей сложности 4 периода, которые входят в 4 столбца и итоговый столбец в конце. Должен быть простой способ сгладить эти данные!

<?php 
for ($sub = 1; $sub < $sub_info . length; $sub++) { 
    ?> 
    <tr> 
     <td><?php echo $sub_info[sub] ?></td> 
     <td><input type = "text" 
        name = "p<?php echo $player; ?>" 
        value = "<?php echo $names[$player - 1]; ?>" 
        id = "p<?php echo $player; ?>" ></td> 
      <?php 
      for ($period = 1; $period < $periods + 1; $period++) { 
       ?> 
      <td> 
       <div class="form-group"> 
        <select onchange="calTotals(<?php echo $player . ',' . $period; ?>)" 
          id="<?php echo "p{$player}p{$period}"; ?>" 
          name="<?php echo "p{$player}p{$period}"; ?>"> 
           <?php 
           $output = ""; 
           for ($i = 0; $i < $players_on_field + 1; $i++) { 
            $output = "<option"; 
            if ($i == 0) { 
             $output .= ' selected'; 
            } 
            $output .= ">$i</option>"; 
            echo $output; 
           } 
           ?> 
        </select> 
       </div> 
      </td> 
     <?php } ?> <!-- Periods --> 
     <td><!-- total periods in game using JavaScript --> 
      <input type="text" 
        name="<?php echo "periods{$player}"; ?>" 
        id="<?php echo "periods{$player}"; ?>"> 
     </td> 
    </tr> 
<?php } ?> <!-- players --> 
+0

Я думаю, вы почти там. Где определены периоды $? – Strawberry

ответ

2

Вы можете использовать join для подключения таблиц, один экземпляр таблицы игроков и три позиции (один за период)

SELECT pl.rank, pl.name, 
    po1.position as period_1_position, 
    po2.position as period_2_position, 
    po3.position as period_3_position from 
    player as pl 
    inner join position as po1 on pl.id = po1.player_id and po1.period=1 
    inner join position as po2 on pl.id = po2.player_id and po2.period=2 
    inner join position as po3 on pl.id = po3.player_id and po3.period=3 
+0

Это отвечает на вопрос! Спасибо! Позже я не буду знать, сколько периодов есть, диапазон периодов, скорее всего, будет от 1 до 8. Это не было частью первоначального вопроса. Спасибо за прямой ответ! – geeves

Смежные вопросы