Создание веб приложения на php+MySql. Выборка из нескольких таблиц

Главная » Видеоуроки » PHP+MySQL » Создание веб приложения на 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>

3 комментария

  1. Angel

    Подскажите, почему не работает вот так:
    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 я задаю при вызове метода.

    Ответить
    • Angel

      В общем, не знаю. Спасибо за материал, переписал все, заодно пытаюсь перейти на PDO. Раньше у меня был отдельный класс для выполнения запросов, отказался от него, потерял посредника и все работает. Где-то я не могу понять с массивами, слишком много измерений, я не правильно считаю?

      Ответить
  2. Камиль

    Здравствуйте. Вернулся из отпуска. Если актуально, готов помочь.

    Ответить

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.

Pin It on Pinterest

Share This