Создание веб приложения на php+MySql. Выборка из нескольких таблиц
В данном уроке мы продолжим разработку нашего веб приложения. Мы сделаем выборку из двух таблиц, расширив запрос выборки игроков, который мы написали на прошлом уроке.
На прошлом уроке мы выбрали всех игроков из таблицы players. На странице players.php у нас имеется таблица с колонками «Имя игрока», «Команда» и «Страна». Но название команды и страны находятся в других таблицах («Команды (teams)» и «Страны (countries)»). Поэтому нам необходимо модифицировать наш запрос с использованием INNER JOIN.
Код урока (api.php)
<?php
function getAllPlayers($db) {
$sql = "SELECT * FROM players
LEFT JOIN teams ON players.team_id = teams.team_id;
";
$result = array();
$stmt = $db->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$result[$row['player_id']] = $row;
}
return $result;
}
function getAllTeams($db) {
$sql = "SELECT * FROM teams
INNER JOIN countries ON teams.country_id = countries.country_id;
";
$result = array();
$stmt = $db->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$result[$row['team_id']] = $row;
}
return $result;
}
Код урока (players.php)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Игроки</title>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>
<header>
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Sport CRM</a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li><a href="index.php">Главная</a></li>
<li><a href="players.php">Игроки</a></li>
<li><a href="teams.php">Команды</a></li>
<li><a href="countries.php">Страны</a></li>
</ul>
</div>
</div>
</nav>
</header>
<div id="content">
<div class="container-fluid">
<?php include 'db.php'; ?>
<?php include 'api.php'; ?>
<?php
$players = getAllPlayers($db);
?>
<table class="table table-bordered">
<tr>
<th>Игрок</th>
<th>Команда</th>
<th>Страна</th>
</tr>
<?php foreach ($players as $player) { ?>
<tr>
<td><?php echo $player['player_name']; ?></td>
<td><?php echo $player['team_name']; ?></td>
</tr>
<?php } ?>
</table>
</div>
</div>
<footer>
</footer>
</body>
</html>
Код урока (teams.php)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Команды</title>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>
<header>
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Sport CRM</a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li><a href="index.php">Главная</a></li>
<li><a href="players.php">Игроки</a></li>
<li><a href="teams.php">Команды</a></li>
<li><a href="countries.php">Страны</a></li>
</ul>
</div>
</div>
</nav>
</header>
<div id="content">
<div class="container-fluid">
<?php include 'db.php'; ?>
<?php include 'api.php'; ?>
<?php
$teams = getAllTeams($db);
?>
<table class="table table-bordered">
<tr>
<th>Команда</th>
<th>Страна</th>
</tr>
<?php foreach ($teams as $team) { ?>
<tr>
<td><?php echo $team['team_name']; ?></td>
<td><?php echo $team['country_name']; ?></td>
</tr>
<?php } ?>
</table>
</div>
</div>
<footer>
</footer>
</body>
</html>
Подскажите, почему не работает вот так:
while ($row = $this->db->query(«SELECT id, id_next_question, answer FROM la_answer WHERE id_question='».$id_question.»‘»)) {
$result[$row[‘id’]] = $row;
}
ругается на id. Я делаю через классы и mysqli… Все остальное, вроде как по уроку. $id_question я задаю при вызове метода.
В общем, не знаю. Спасибо за материал, переписал все, заодно пытаюсь перейти на PDO. Раньше у меня был отдельный класс для выполнения запросов, отказался от него, потерял посредника и все работает. Где-то я не могу понять с массивами, слишком много измерений, я не правильно считаю?
Здравствуйте. Вернулся из отпуска. Если актуально, готов помочь.