2015-08-24 80 views
0

其實我試圖通過Silex加入三張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(); 

我該如何解決這個問題?

在此先感謝。

回答

0

這個問題與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的所有記錄進行分組的所有可能組合)。

相反,你只需要告訴您參加由哪個字段您希望創建的連接(我假設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; 

您應該閱讀有關加入。