PHP MYSQL вложенное соединение - PullRequest
0 голосов
/ 24 апреля 2020
<?php 
require "includes/dbh_l4d2.php";
$sql = "
SELECT * 
  FROM vpk
  JOIN maps 
    ON vpk.vpk_id = maps.vpk_id";

$result = mysqli_query($conn, $sql);
?>
<!DOCTYPE html><html><head><title>Website Title</title>
<link rel = "stylesheet" type = "text/css" href = "assets/css/tek_style.css" /></head>
<body>
<table>
<tr><th>VPK</th><th>MAP</th></tr>
<?php
  $result_num_rows = mysqli_num_rows($result);
  if( $result_num_rows> 0) {
    //while($row = mysqli_fetch_array($result)) {
    while($row = $result->fetch_assoc()) {
      echo '<tr><td id="'.$row["alpha_anchor"].'" rowspan="'.$row["map_count"].'" class="first_row">'.
            '<h3 id="'.$row["anchor"].'">'.$row["vpk_title"].'</h3>'.$row["vpk_file"].'<br>'.
            '<a class="details" href="'.$row[details].'">Details</a>&nbsp;'.
            '<i><a href="'.$row[download].'">Download vpk</a></i>'.
            '</td></tr>';

      for ($i=0; $i < $row["map_count"]-1; $i++) {
        echo '<tr><td>'.$row["map_name"].'></td></tr>';
      }

    }
  }
?>
</table></body></html>

Вот вывод из кода

wrong output

Вот как я хочу, чтобы он выглядел

CORRECT OUTPUT Что нужно сделать, чтобы сделать эту работу правильно ??? Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 24 апреля 2020

Ваш вложенный l oop получает map_name из той же строки, а не из каждой строки результатов.

Что вы можете сделать, это использовать GROUP_CONCAT(), чтобы объединить все имена карт в одну строку результатов, затем используйте explode(), чтобы разделить их при создании таблицы.

<?php 
require "includes/dbh_l4d2.php";
$sql = "SELECT vpk.*, GROUP_CONCAT(maps.map_name) AS map_names 
        FROM vpk 
        INNER JOIN maps ON vpk.vpk_id = maps.vpk_id
        GROUP BY vpk.vpk_id";
//$sql = "SELECT * FROM vpk, maps JOIN vpk ON vpk.vpk_id = maps.vpk_id";
$result = mysqli_query($conn, $sql);
?>
<!DOCTYPE html><html><head><title>Website Title</title>
<link rel = "stylesheet" type = "text/css" href = "assets/css/tek_style.css" /></head>
<body>
<table>
    <tr><th>VPK</th><th>MAP</th></tr>
    <?php
    $result_num_rows = mysqli_num_rows($result);
if( $result_num_rows> 0) {
    //while($row = mysqli_fetch_array($result)) {
    while($row = $result->fetch_assoc()) {
        $map_names = explode(',', $row['map_names']);
        echo '<tr><td id="'.$row["alpha_anchor"].'" rowspan="'.$row["map_count"].'" class="first_row">'.
            '<h3 id="'.$row["anchor"].'">'.$row["vpk_title"].'</h3>'.$row["vpk_file"].'<br>'.
            '<a class="details" href="'.$row[details].'">Details</a>&nbsp;'.
            '<i><a href="'.$row[download].'">Download vpk</a></i>'.
            '</td></tr>';

        foreach ($map_names as $map_name) {
            echo '<tr><td>'.$map_name.'></td></tr>';
        }
    }
}
?>
</table></body></html>
...