我正在使用cakephp 2.1并编写如下的sql语句。
SELECT * FROM industry
LEFT JOIN movie ON movie.industry_id = industry.id
LEFT JOIN (
SELECT MAX(id) AS TID ,movie_id FROM trailer
GROUP BY movie_id
) AS c ON c.movie_id = movie.id
LIMIT 0, 4;
行业是“行业”模式,电影是“电影”模型,预告片是“预告片”模型,我试过这个。
$options['joins'] = array(
array(
'table' => 'movies',
'alias' => 'Movie',
'type' => 'left',
'conditions' => array('Industry.id = Movie.industry_id')),
array(
'table' => 'movie_trailers',
'alias' => 'Trailer',
'type' => 'left',
'conditions' => array('Trailer.movie_id = Movie.id')));
$trailers = $this->Industry->find('all', $options);
所以请建议我将此语句转换为cakephp语句。
答案 0 :(得分:1)
答案 1 :(得分:1)
很难说出你想要用你的查询完成什么。但看起来你真正想要的是关于四个最新预告片的信息。
就像它一样,你总是可以把它全部扔进连接中:
$records = $this->Industry->find('all', array(
'fields' => array('Trailer.id', 'Industry.id', 'Industry.Name', 'Movie.id', 'Movie.name'),
'limit' => 4,
'joins' => array(
array(
'table' => 'movies',
'alias' => 'Movie',
'type' => 'LEFT',
'conditions' => array(
'Movie.industry_id = Industry.id'
),
),
array(
'table' => '(SELECT MAX(id) As id, movie_id FROM trailers GROUP BY movie_id)',
'alias' => 'Trailer',
'type' => 'LEFT',
'conditions' => array(
'Trailer.movie_id = Movie.id'
),
),
),
));
由于在连接表中抛出的查询,它将破坏ORM的可移植性,但它可以工作。
以下是另一个可能有用的问题:CakePHP and subquery