问题 教条 - 来自的子查询


我在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();

但我不能把它放在“从”按名称排序。


6179
2017-12-08 19:21


起源

你是什​​么意思:'把它放在'从“按名称排序”? - Chris Williams
学说是否支持子查询?也许把整个查询放在(...) - Yada
@Chris Williams:看看mysql查询:) @Yada:当我把整个查询放入()时,Doctrine说我“(SELECT”表不存在 - snapshot


答案:


这是一个答案:

$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');

9
2017-12-09 15:46





我用 学说1.2 和 Symfony 1.4 和 Doctrine_RawSql 适用于子查询。那你可以 addComponent 对于模型。

某物 价值 提到的是你不能直接使用 Doctrine_Query 对象 作为子查询  您可以轻松获取SQL表单 getSqlQuery() 方法甚至 getSqlQueryPart 并将结果用于子查询。

getSqlQueryPart 仅用于重建查询的某些部分非常有用。


2
2017-08-17 08:22



没有Doctrine_RawSql()这样的东西 - Lauris Kuznecovs


Doctrine不能在FROM子句中执行子查询(也不能加入子查询)。您当前的Doctrine查询将按计数排序,然后按名称排序。这不是你想要的吗?


1
2017-12-09 01:04



现在它按计数排序,何时是相同的值,它按名称排序。我想得到标准的云标签:10个标签按名称排序最多 - snapshot


Doctrine将允许您在FROM子句中放置子查询。但是,它只能在子查询中使用DQL文本语句,实际上不能使用其他查询对象。如果以文本形式重写DQL子查询,则应该能够使用它。

看到 这个文档的页面 举个例子。该示例将DQL子查询放在WHERE子句中,但它提到您可以在FROM子句中使用子查询。


0
2017-12-09 02:58



我写道:$ tags = Doctrine_Query :: create() - > from('(SELECT COUNT(*)as count,t.name FROM Tag t INNER JOIN t.VideoHasTag v GROUP BY v.idTag ORDER BY count DESC LIMIT 30) as tags') - > orderBy('name') - > execute();我得到“找不到课程(SELECT”) - snapshot
学说确实如此 不 支持FROM子句中的子查询,尽管文档说的是: groups.google.com/group/doctrine-user/browse_thread/thread/... - EvanK