【DB:パターン】一覧 → 詳細
【目的】
DBからある特定のデータだけ表示したい。
【仕様】
一覧+詳細
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>