2013-10-01 10 views
8

Voglio usare union in doctrine, ho cercato molto ma non ho avuto alcun successo, questa è la mia query di unione in sql, come convertire questa query in doctrine?Come scrivere una query di unione in dottrina?

select * from (select orderid,tutorialId,points,allow_multiple,question,answer1,image1,correct1,answer2,image2,correct2,answer3,image3,correct3,answer4,image4,correct4,answer5,image5,correct5,'1' as istest,'' as content,'' as media,'' as media_type_id from tutorial_test 

union 

select orderid,tutorialId,'0' as istest,content,media,media_type_id,'' as points,'' as allow_multiple,'' as question,'' as answer1,'' as image1,'' as correct1,'' as answer2,'' as image2,'' as correct2,'' as answer3,'' as image3,'' as correct3,'' as answer4,'' as image4,'' as correct4,'' as answer5,'' as image5,'' as correct5 from tutorial_elements) a where a. tutorialId = 1 order by orderid asc 

e questo è la mia domanda dottrina

$query = "SELECT * FROM(SELECT 
        tt.tutorialid 
       FROM 
        TutorialTest tt 
       UNION 
       SELECT te.tutorialid) tte 
       WHERE tte.tutorialid = 1  

    "; 
    $qb  = $this->Doctrine->createQuery($query); 
    $tutorial_test = $qb->getResult(); 

ho studiato molto, ma non ho avuto alcun successo, se qualcuno può aiutare, milioni di grazie in anticipo UFT questo.

risposta

8

Beh io ho trovato una soluzione

possiamo usare questa query con RSM come segue

"Usman è il nome fondamentalmente tavolo e di classe"

$rsm = new ResultSetMapping(); 
    $rsm->addEntityResult('Usmans', 'u'); 
    $rsm->addFieldResult('u', 'orderid', 'orderid'); 
    $rsm->addFieldResult('u', 'tutorialId', 'tutorialid'); 
    $rsm->addFieldResult('u', 'points', 'points'); 

    $query = $this->Doctrine->createNativeQuery('SELECT * FROM usman', $rsm); 
    $tutorial_tests = $query->getResult(); 

E possiamo usare senza ORM come

$testQuery = " 
    select * from (
      select orderid, 
       tutorialId, 
       points, 
       allow_multiple, 
       question, 
       answer1, 
       image1, 
       correct1, 
       answer2, 
       image2, 
       correct2, 
       answer3, 
       image3, 
       correct3, 
       answer4, 
       image4, 
       correct4, 
       answer5, 
       image5, 
       correct5, 
       '1' as istest, 
       '' as content, 
       '' as media, 
       '' as media_type_id 
      from tutorial_test 

      union 

      select orderid, 
       tutorialId, 
       '0' as istest, 
       content, 
       media, 
       media_type_id, 
       '' as points, 
       '' as allow_multiple, 
       '' as question, 
       '' as answer1, 
       '' as image1, 
       '' as correct1, 
       '' as answer2, 
       '' as image2, 
       '' as correct2, 
       '' as answer3, 
       '' as image3, 
       '' as correct3, 
       '' as answer4, 
       '' as image4, 
       '' as correct4, 
       '' as answer5, 
       '' as image5, 
       '' as correct5 
      from tutorial_elements 
     ) a 
     where a. tutorialId = $tutorial_id 
     order by orderid asc 
"; 

$resultSets = $this->Doctrine->getConnection()->fetchAll($testQuery); 
-3

Per query di unione ha alcune regole

(1) Tutte le istruzioni SELECT ha lo stesso tipo di dati e stesso numero di colonne

Nella tua query di selezione è il tipo di dati diverso, non di colonne sono non corrispondono.

Quindi hai trovato un problema.

qui è la soluzione

select orderid, tutorialId, points, allow_multiple, question, answer1, image1, correct1, answer2, image2, correct2, answer3, image3, correct3, answer4, image4, correct4, answer5, image5, correct5,'1' as istest,'' as content,'' as media,'' as media_type_id 
from tutorial_test 

union 

select orderid, tutorialId,'0' as istest, content, media, media_type_id,'' as points,'' as allow_multiple,'' as question,'' as answer1,'' as image1,'' as correct1,'' as answer2,'' as image2,'' as correct2,'' as answer3,'' as image3,'' as correct3,'' as answer4,'' as image4,'' as correct4,'' as answer5,'' as image5,'' as correct5, '1' as istest,'' as content,'' as media,'' as media_type_id 
from tutorial_elements 
where a. tutorialId = 1 
order by orderid asc 
+0

fondamentalmente la mia query sql è perfettamente soddisfacente e mi dà risultato in sql, la mia domanda è che come posso scrivere questa query nella sintassi della doctrina. – usii