我在MySQL中有一个查询:
SELECT * FROM (
SELECT COUNT(*) AS count, t.name AS name
FROM tag t
INNER JOIN video_has_tag v USING (idTag)
GROUP BY v.idTag
ORDER BY count DESC
LIMIT 10
) as tags ORDER BY name
我想在学说中写这个。我怎么能这样做?我写了:
Doctrine_Query::create()
->select('COUNT(t.idtag) as count, t.name')
->from('Tag t')
->innerJoin('t.VideoHasTag v')
->groupBy('v.idTag')
->orderBy('count DESC, t.name')
->limit(30)
->execute();
但我不能把它放在“从”按名称排序。
这是一个答案:
$q = new Doctrine_RawSql();
$q->addComponent('t', 'Tag')
->select('{t.name}, {t.count}')
->from('(SELECT COUNT(*) as count, t.name,t.idtag
FROM Tag t
INNER JOIN Video_Has_Tag v USING(idTag)
GROUP BY v.idTag
ORDER BY count DESC
LIMIT 50) t')
->orderBy('name');
我用 学说1.2 和 Symfony 1.4 和 Doctrine_RawSql
适用于子查询。那你可以 addComponent
对于模型。
某物 价值 提到的是你不能直接使用 Doctrine_Query
对象 作为子查询 但 您可以轻松获取SQL表单 getSqlQuery()
方法甚至 getSqlQueryPart
并将结果用于子查询。
getSqlQueryPart
仅用于重建查询的某些部分非常有用。
Doctrine不能在FROM子句中执行子查询(也不能加入子查询)。您当前的Doctrine查询将按计数排序,然后按名称排序。这不是你想要的吗?
Doctrine将允许您在FROM子句中放置子查询。但是,它只能在子查询中使用DQL文本语句,实际上不能使用其他查询对象。如果以文本形式重写DQL子查询,则应该能够使用它。
看到 这个文档的页面 举个例子。该示例将DQL子查询放在WHERE子句中,但它提到您可以在FROM子句中使用子查询。