【DB:パターン】一覧 → 詳細

【目的】
DBからある特定のデータだけ表示したい。

【仕様】
一覧+詳細
f:id:aruku-hito:20191122214727p:plain

2つを1つに

テーブルの結合とは、重複したデータのテーブルを分割しておいて、必要に応じて、仮想的な1つの表として連結して扱う方法。
このようにテーブルを結合することを「リレーション」とか「連結」「関連付け」と呼ぶ場合もある。

一覧ページ

index.php

<?php

    $pdo = new PDO('mysql:host=localhost; dbname=mydb; charset=utf8','root','');

    $sql = 'SELECT players.id, name, level, job_name FROM players LEFT JOIN jobs ON jobs.id = players.job_id';
    $statement = $pdo->prepare($sql);
    $statement->execute();


//☆☆複数のレコード情報を1行ずつ、配列に格納☆☆
    $results = [];
    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
        $results[] = $row;
    }

    $statement = null;
    $pdo = null;

    $message = 'hello world';
    require_once 'views/index.tpl.php';

?>

index.tpl.php

 <!DOCTYPE html>
<html lang='ja'>
    <?php include('header.inc.php'); ?>
    <body>

        <h1><?= $message ?></h1>

        <table>
    	    <?php foreach ($results as $player) { ?>
                <tr>
                    <td><?= $player['id'] ?></td>
                    <td><?= $player['name'] ?></td>
                    <td><?= $player['job_name'] ?></td>
                    <td><?= $player['level'] ?></td>
      //☆☆idをURLのパラメータで渡している☆☆
                    <td><a href="show_player.php?id=<?= $player['id'] ?>">表示</a></td>
                </tr>
             <?php } ?>
    	</table>

        <?php include('footer.inc.php'); ?>
    </body>
</html>

詳細ページ

show_player.php

<?php

    $pdo = new PDO('mysql:host=localhost; dbname=mydb; charset=utf8','root','');

//☆☆idがある場合、id変数に代入☆☆
    if(isset($_REQUEST['id'])) {
        $id = $_REQUEST['id'];
    }

//☆☆idのレコードだけ取得(WHERE)☆☆
    $sql = 'SELECT players.id, name, level, job_name
            FROM players LEFT JOIN jobs ON jobs.id = players.job_id
            WHERE players.id = :id';

//:id', と $id, を紐づけている(bindValue)☆☆
    $statement = $pdo->prepare($sql);
    $statement->bindValue(':id', $id, PDO::PARAM_INT);
    $statement->execute();

//☆☆1行のレコード情報を変数に格納☆☆
    $player = $statement->fetch(PDO::FETCH_ASSOC);

    $statement = null;
    $pdo = null;

    $message = 'This is piaza';
    require_once 'views/profile.tpl.php';
?>

showprofile.tpl.php

<!DOCTYPE html>
<html lang='ja'>
    <?php include('header.inc.php'); ?>
    <body>

        <h1>Player profile</h1>

            <ul>
                <li>ID:<?= $player['id'] ?></li>
                <li>名前:<?= $player['name'] ?></li>
                <li>職業:<?= $player['job_name'] ?></li>
                <li>レベル:<?= $player['level'] ?></li>
            </ul>
            
            <p><a href="index.php">リストに戻る</a></p>
        
        <?php include('footer.inc.php'); ?>
    </body>
</html>