如何使用 silex 和 PDO 连接表?

How to join tables with silex and PDO?

实际上我正在尝试通过 Silex 使用 PDO 连接三个表。 但是我不知道具体怎么做。

media_movies.php

private $id;
private $title;
private $titleOriginal;
private $realisator;
private $plot;
private $actor;
private $country;
private $type;
private $genre;
private $releaseDate;

在我的 cinema_session.php 中:

private $id;
private $idmovie;
private $idTheater;
private $language;
private $date;
private $subodels;

和我的cinema_theater

private $id;
private $name;
private $numberOfPlace;
private $address;
private $phone;

这是我的获取路线

$app->get('/ListSessions', function (Application $App) {
//should i change it , but by what ?
$status = $app ['repo.Sessions']->getAll();
return $app['serializer']->serialize($status, $app['format']);

我的 getAll 函数

public function getAll() {
  $result = $this->db->query('SELECT m.title, m.runnigTime, s.date, t.name as theater
  FROM media_movies m, cinema_sessions s, cinema_theaters t');
return $result->fetchAll();

我该如何解决这个问题?

提前致谢。

此问题与 Silex、PHP (PDO) 或 MySQL 无关。你的问题是你应该学习如何在普通 SQL.

中正确创建 JOIN 查询

在您的查询中:SELECT m.title, m.runnigTime, s.date, t.name as theater FROM media_movies m, cinema_sessions s, cinema_theaters t 问题是您正在创建一个 cross join(笛卡尔积,这基本上意味着对表 m、s 和 t 中的所有记录进行分组的所有可能组合)。

相反,你只需要告诉你的 JOIN 你想要创建连接的字段(我假设是 id 字段)所以你应该得到类似的东西:

SELECT m.title, m.runnigTime, s.date, t.name as theater 
FROM media_movies m, cinema_sessions s, cinema_theaters t 
WHERE m.id = s.idMovie 
  AND s.idTheater = t.id;

请注意,您可以使用 INNER JOIN 语法编写(有些人更喜欢这种语法):

SELECT m.title, m.runnigTime, s.date, t.name as theater 
FROM media_movies m INNER JOIN cinema_sessions s ON m.id = s.idMovie
    INNER JOIN cinema_theaters t ON s.idTheater = t.id;

您可能应该阅读有关加入的信息。