转换MySQL查询我不能转换此查询:无法使用学说DQL或QueryBuilder的
SELECT c.title, COUNT(*),
(
SELECT ba_thumb.link
FROM ba_video
INNER JOIN video_channel ON video_channel.video_id=ba_video.id
INNER JOIN ba_thumb ON ba_thumb.video_id=video_channel.video_id
INNER JOIN ba_channel ON ba_channel.id=video_channel.channel_id
WHERE video_channel.channel_id=c.id
ORDER BY ba_video.views DESC, ba_thumb.id ASC
LIMIT 1
) AS ba_thumb_link
FROM ba_channel c
INNER JOIN video_channel ON video_channel.channel_id=c.id
INNER JOIN ba_video ON ba_video.id=video_channel.video_id
GROUP BY video_channel.channel_id
ORDER BY COUNT(*) DESC
到DQL或使用QueryBuilder的。
我试着在DQL:
return $this->_em->createQuery('
SELECT c.title, COUNT(*),
(
SELECT t.link
FROM BAVideoGalleryBundle:Video v
INNER JOIN v.channels c
INNER JOIN v.thumbs t
WHERE c.id=mc.id
ORDER BY v.views DESC, t.id ASC
LIMIT 1
)
FROM BAVideoGalleryBundle:Channel mc
INNER JOIN BAVideoGalleryBundle:Video mv
GROUP BY mv.Channels.id
ORDER BY COUNT(*) DESC')
->getResult();
我得到:
"[Syntax Error] line 0, col 216: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got 'LIMIT' "
,我尝试使用的QueryBuilder:
$query = $this->getEntityManager()->createQueryBuilder()
->select('c.title, COUNT(*)')
->from('BAVideoGalleryBundle:Channel', 'mc')
->innerJoin('BAVideoGalleryBundle:Video', 'mv')
->groupBy('mv.Channels.id')
->orderBy('COUNT(*)', 'DESC');
$subquery = $this->getEntityManager()->createQueryBuilder()
->select('t.link')
->from('BAVideoGalleryBundle:Video', 'v')
->innerJoin('v.channels', 'c')
->innerJoin('v.thumbs', 't')
->where('c.id=mc.id')
->orderBy('v.views', 'DESC')
->orderBy('t.id', 'ASC')
->getQuery()
->getResult();
return $query->addSelect('('.$subquery->getDql().')')
但相关性不工作,我得到:
[Semantical Error] line 0, col 105 near 'mc.id ORDER BY': Error: 'mc' is not defined
在你的app/logs中检查你的'dev.log'。或者检查你的MySQL一般查询日志,看看你的实际查询是从教条转换成的。 –
LIMIT在DQL中不存在,您必须使用' - > setMaxResults(1)' –
并使用setFirstResult(和setMaxResults)。然后做限制0,10,你将在查询结束.....-> orderBy('t.id','ASC') - > setFirstResult(0) - > setMaxResults(1) – Nico