如何使用 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;
您可能应该阅读有关加入的信息。
实际上我正在尝试通过 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;
您可能应该阅读有关加入的信息。