Doktrin - dan subquery

4 Cevap php

Ben MySQL bir sorgu var:

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

ve ben doktrinde bu yazmak istiyorum. Bunu nasıl yapabilirim? Ben yazdı:

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

Ama ada göre sıralamak için "den" bunu koyamazsınız.

4 Cevap

Bu bir cevap:

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

Ben kullanmak Doctrine 1.2 ve Symfony 1.4 ve Doctrine_RawSql sorgular ile çalışır. Ondan sonra, addComponent modelleri için.

Something worth bahsedilmez doğrudan Doctrine_Query nesneleri as subqueries BUT kolayca getSqlQuery() {[(via SQL form alabilirsiniz kullanamazsınız olduğunu 4)]} ve alt sorgu için sonuç kullanabilirsiniz.

getSqlQueryPart Sorgunun sadece belirli kısımlarını yeniden inşa yararlıdır.

Doktrin DAN yan tümcesinde bir alt sorgu yapamaz (ne de bir alt sorgu JOIN). Geçerli Doktrin sorgu sayımına göre sıralamak ve daha sonra adı ile gidiyor. Ne isteyen vardır değil mi?

Doktrin FROM yan tümcesinde bir alt sorgu koymak izin verir. Ancak, sadece sorguda DQL text ifadelerini alabilir, aslında başka bir sorgu nesnesini kullanamazsınız. Eğer metinsel forma DQL alt sorgu yeniden varsa, bunu kullanmak gerekir.

this page of the documentation bir örnek için bkz. Örnek WHERE yan tümcesinde DQL alt sorgu koyar, ancak bu FROM yan tümcesinde alt sorgular kullanabilirsiniz bahseder.