Объединить 4 таблицы, с использованием GROUP_CONCAT

243
04 января 2018, 20:56

Такая проблема, не получается вывести список игроков в команде.

Играют 2 команды. У каждой команды, надо вывести её город и название, дату проведения игры, статус (с играно или нет), место проведения (игра может быть в городе одной из команд).

Это я сделал. http://sqlfiddle.com/#!9/61ef227/1

SELECT 
    team1.name AS team1,
    teamOne.name AS city1,
    team2.name AS team2,
    teamTwo.name AS city2,
    game.date AS data, 
    game.status,
    placeGame.name AS place
    FROM game
    LEFT JOIN team AS team1 ON game.team1_id = team1.id 
    LEFT JOIN team AS team2 ON game.team2_id = team2.id
    LEFT JOIN city AS teamOne ON team1.city_id = teamOne.id 
    LEFT JOIN city AS teamTwo ON team2.city_id = teamTwo.id 
    LEFT JOIN city AS placeGame ON game.game_city = placeGame.id

А вот список игроков у команды у меня не получается. Сначала попытался вывести просто команду и список игроков это у меня получилось http://sqlfiddle.com/#!9/61ef227/2

SELECT team.name, GROUP_CONCAT(player.name SEPARATOR ', ')
    FROM team
    LEFT JOIN player ON player.team_id = team.id 
    GROUP BY team.id

Но потом когда начал объединять эти 2 кода, то пишет ошибку

Unknown column 'team.id' in 'on clause'

Я понимаю, то, что сначала всё ищется в таблице game, но там нету team.id из-за этого ошибка.

Я вроде бы объединил player и team, но почему-то не работает.

Помогите пожалуйста исправить.

SELECT 
    team1.name AS team1,
    teamOne.name AS city1,
    team2.name AS team2,
    teamTwo.name AS city2,
    game.date AS data, 
    game.status,
    placeGame.name AS place,
    GROUP_CONCAT(player.name SEPARATOR ', ')
    FROM game
    LEFT JOIN team AS team1 ON game.team1_id = team1.id 
    LEFT JOIN team AS team2 ON game.team2_id = team2.id
    LEFT JOIN city AS teamOne ON team1.city_id = teamOne.id 
    LEFT JOIN city AS teamTwo ON team2.city_id = teamTwo.id 
    LEFT JOIN city AS placeGame ON game.game_city = placeGame.id
    LEFT JOIN player ON player.team_id = team.id 
    GROUP BY team.id

/////////////////////////////////////////////////

-- phpMyAdmin SQL Dump
-- version 4.3.11
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1
-- Время создания: Дек 31 2017 г., 17:06
-- Версия сервера: 5.6.24
-- Версия PHP: 5.6.8
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- База данных: `lesson15`
--
-- --------------------------------------------------------
--
-- Структура таблицы `city`
--
CREATE TABLE IF NOT EXISTS `city` (
  `id` int(11) NOT NULL,
  `name` varchar(256) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `city`
--
INSERT INTO `city` (`id`, `name`) VALUES
(1, 'Санкт-Петербург '),
(2, 'Москва'),
(3, 'Барселона'),
(4, 'Фулем Роуд'),
(5, 'Траффорд');
-- --------------------------------------------------------
--
-- Структура таблицы `game`
--
CREATE TABLE IF NOT EXISTS `game` (
  `id` int(11) NOT NULL,
  `team1_id` int(11) NOT NULL,
  `team2_id` int(11) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `game_city` int(11) NOT NULL,
  `status` int(11) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `game`
--
INSERT INTO `game` (`id`, `team1_id`, `team2_id`, `date`, `game_city`, `status`) VALUES
(1, 2, 5, '2017-12-30 20:05:49', 1, 0),
(2, 1, 3, '2017-12-30 20:05:49', 3, 1),
(3, 3, 6, '2017-11-30 20:06:30', 5, 1),
(4, 4, 5, '2017-12-30 20:06:30', 4, 0);
-- --------------------------------------------------------
--
-- Структура таблицы `player`
--
CREATE TABLE IF NOT EXISTS `player` (
  `id` int(11) NOT NULL,
  `name` varchar(256) NOT NULL,
  `team_id` int(11) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `player`
--
INSERT INTO `player` (`id`, `name`, `team_id`) VALUES
(1, 'Андрей Лунев', 1),
(2, 'Юрий Лодыгин', 1),
(3, 'Михаил Кержаков', 1),
(4, 'Иван Новосельцев', 1),
(5, 'РЕБРОВ Артём ', 2),
(6, 'ПЕТКОВИЧ Марко ', 2),
(7, 'КОМБАРОВ Дмитрий ', 2),
(8, 'ГЛУШАКОВ Денис ', 2),
(9, 'Ракитич Иван', 3),
(10, 'Арда Туран', 3),
(11, 'Серджи Бускетс', 3),
(12, 'Давид Костас', 3),
(13, 'Давид Луиз', 4),
(14, 'Виллиан', 4),
(15, 'Педро', 4),
(16, 'Альваро Мората', 4),
(17, 'Амир Натхо', 5),
(18, 'Иван Галанин', 5),
(19, 'Михаил Лысов', 5),
(20, 'Иван Лапшов', 5),
(21, 'Антонио Валенсия', 6),
(22, 'Поль Погба', 6),
(23, 'Джесси Лингард', 6),
(24, 'Ромелу Лукаку', 6);
-- --------------------------------------------------------
--
-- Структура таблицы `team`
--
CREATE TABLE IF NOT EXISTS `team` (
  `id` int(11) NOT NULL,
  `name` varchar(256) NOT NULL,
  `city_id` int(11) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `team`
--
INSERT INTO `team` (`id`, `name`, `city_id`) VALUES
(1, 'Зенит', 1),
(2, 'Спартак', 2),
(3, 'Барселона', 3),
(4, 'Челси', 4),
(5, 'Локомотив', 2),
(6, 'Манчестер Юнайтед ', 5);
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `city`
--
ALTER TABLE `city`
  ADD PRIMARY KEY (`id`);
--
-- Индексы таблицы `game`
--
ALTER TABLE `game`
  ADD PRIMARY KEY (`id`);
--
-- Индексы таблицы `player`
--
ALTER TABLE `player`
  ADD PRIMARY KEY (`id`);
--
-- Индексы таблицы `team`
--
ALTER TABLE `team`
  ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT для сохранённых таблиц
--
--
-- AUTO_INCREMENT для таблицы `city`
--
ALTER TABLE `city`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=6;
--
-- AUTO_INCREMENT для таблицы `game`
--
ALTER TABLE `game`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT для таблицы `player`
--
ALTER TABLE `player`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=25;
--
-- AUTO_INCREMENT для таблицы `team`
--
ALTER TABLE `team`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Я тупанул, выводил, неизвестно что. Теперь разобрался и всё работает, выводит рядом с названием команды, состав

А можно ли как-то сократить код?

SELECT 
    team1.name AS team1,
    teamOne.name AS city1,
    GROUP_CONCAT(player.name SEPARATOR ', ') AS comanda1,
    team2.name AS team2,
    teamTwo.name AS city2,
    GROUP_CONCAT(player.name SEPARATOR ', ') AS comanda2,
    game.date AS data, 
    game.status,
    placeGame.name AS place
    FROM game
    LEFT JOIN team AS team1 ON game.team1_id = team1.id 
    LEFT JOIN team AS team2 ON game.team2_id = team2.id
    LEFT JOIN city AS teamOne ON team1.city_id = teamOne.id 
    LEFT JOIN city AS teamTwo ON team2.city_id = teamTwo.id 
    LEFT JOIN city AS placeGame ON game.game_city = placeGame.id
    LEFT JOIN player ON player.team_id = team1.id
    GROUP BY team1.name

http://sqlfiddle.com/#!9/61ef227/9

READ ALSO
c# узнать разрешения на папку

c# узнать разрешения на папку

нашел только вариант как узнать имею ли я разрешения на папку через FileIOPermissionА нужно получить список доменных пользователей и групп которые...

238
Получение ImageUrl из запроса

Получение ImageUrl из запроса

Не удается получить объект Image, чтобы затем достать из него ImageUrl, который представляет собой строку в формате base64

275
Unity отсчет времени

Unity отсчет времени

Как можно реализовать отсчет времени в игре через DateTime? Что бы допустим через 24 какое то действие выполнилось

248