Не удается получить результат объединенной таблицы - PullRequest
0 голосов
/ 16 мая 2018

Я хочу получить все поля двух таблиц, одна из которых называется "команда", а другая "team_info", которая соединяет первую с FK.Я получил результат, используя этот запрос:

$sql = $this->db->prepare("SELECT * FROM team
INNER JOIN team_info ON team.id = team_info.team_id
WHERE id = :team_id");

$sql->bindParam("team_id", $args["team_id"]);
$sql->execute();
$teams = $sql->fetchAll();
return $response->withJson($teams);

, но он будет возвращать только поля таблицы team, как я могу вернуть также поля team_info?

Спасибо.

-- -----------------------------------------------------
-- Table `mydb`.`team`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`team` (
  `id` INT NOT NULL,
  `country_id` INT NULL,
  `link` VARCHAR(255) NULL,
  `name` VARCHAR(255) NULL,
  `update_at` DATETIME NULL,
  PRIMARY KEY (`id`),
  INDEX `FK_country_team_country_id_idx` (`country_id` ASC),
  CONSTRAINT `FK_country_team_country_id`
    FOREIGN KEY (`country_id`)
    REFERENCES `mydb`.`country` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`team_info`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`team_info` (
  `team_id` INT NOT NULL,
  `country_id` INT NOT NULL,
  `venue_id` INT NULL,
  `shield_link` VARCHAR(255) NULL,
  `founded` VARCHAR(255) NULL,
  `address` VARCHAR(255) NULL,
  `phone` VARCHAR(255) NULL,
  `fax` VARCHAR(255) NULL,
  `email` VARCHAR(255) NULL,
  `official_site` VARCHAR(255) NULL,
  INDEX `id_idx` (`team_id` ASC),
  INDEX `id_idx1` (`country_id` ASC),
  INDEX `venue_id_idx` (`venue_id` ASC),
  CONSTRAINT `FK_team_team_info_team_id`
    FOREIGN KEY (`team_id`)
    REFERENCES `mydb`.`team` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `FK_country_team_info_country_id`
    FOREIGN KEY (`country_id`)
    REFERENCES `mydb`.`country` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `FK_venue_team_info_venue_id`
    FOREIGN KEY (`venue_id`)
    REFERENCES `mydb`.`venue` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Если вы делаете что-то вроде:

SELECT * FROM team <------
INNER JOIN team_info ON team.id = team_info.team_id
...

С этим «*» вы ссылаетесь только на все столбцы внутри таблицы «team».Когда вы используете псевдонимы, это больше не должно быть проблемой.

например:

SELECT t.*, ti.* FROM team t
INNER JOIN team_info ti ON t.id = ti.team_id
WHERE id = :team_id
0 голосов
/ 16 мая 2018

вы должны указать все столбцы после выбора, потому что вы используете две таблицы, поэтому вам нужно указать имя столбца

вместо * вам нужно указать все столбцы обеих таблиц, чтобы вы могли получить результат из обеих таблиц

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...