I want to use union in doctrine, i searched a lot but didn't get any success, this is my union query in sql, how to convert this query in doctrine?
我想在doctrine中使用union,我搜索了很多但没有取得任何成功,这是我在sql中的union查询,如何在doctrine中转换这个查询?
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
AND this one is my doctrine query
这一个是我的学说查询
$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();
i researched alot but didn't get any success, if any one can help, million of thanks in advance fot that.
我研究了很多,但没有取得任何成功,如果任何人可以帮助,万分感谢提前。
2 个解决方案
#1
8
Well i have found a solution
好吧,我找到了解决方案
We can use this query with RSM as following
我们可以将此查询与RSM一起使用,如下所示
"Usman is basically table name and class"
“Usman基本上是桌面名称和类”
$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();
AND we can use without ORM as
我们可以在没有ORM的情况下使用
$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);
#2
-3
For Union Query has some Rules
对于Union Query有一些规则
(1) All SELECT Statements has same data type and same no of columns
(1)所有SELECT语句具有相同的数据类型和相同的列数
In your select query has different datatype, no of columns are not match.
在您的选择查询中具有不同的数据类型,没有列不匹配。
So you found Proble.
所以你发现了问题。
here is solution
这是解决方案
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
#1
8
Well i have found a solution
好吧,我找到了解决方案
We can use this query with RSM as following
我们可以将此查询与RSM一起使用,如下所示
"Usman is basically table name and class"
“Usman基本上是桌面名称和类”
$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();
AND we can use without ORM as
我们可以在没有ORM的情况下使用
$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);
#2
-3
For Union Query has some Rules
对于Union Query有一些规则
(1) All SELECT Statements has same data type and same no of columns
(1)所有SELECT语句具有相同的数据类型和相同的列数
In your select query has different datatype, no of columns are not match.
在您的选择查询中具有不同的数据类型,没有列不匹配。
So you found Proble.
所以你发现了问题。
here is solution
这是解决方案
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