2013-08-26 43 views
0

----與Symfony2.3.​​1和Doctrine2完成----凡-條件爲IN(子查詢)與Doctrine2在Symfony2.3.​​1不工作

對不起,我希望我是不是太傻找到適合我的問題的解決方案。我試圖建立一個查詢小時。

SELECT * FROM product 
    WHERE product_id in 
    (
     SELECT product_id from (
      SELECT count(*) as result_amount, product_id FROM product_x_attribut 
      JOIN productattribut on productattribut_id = productattribut.id 
      WHERE (
      productkey = "price" and 
      stringType = "premium" 
     ) or (
      productkey = "size" and 
      stringType = "S" 
     ) 
      GROUP BY product_id 
      HAVING result_amount = 2 
     ) as temp 
    ) 
GROUP BY product_id 
ORDER BY p0_.name ASC 

這是在phpmyAdmin中正常工作的SQL。

由此可以看出像

Select * from abc where abc.x in (Select * from (select * from) as abcd) 

因此,有一個核心的查詢,我把它稱爲subSubQuery,圍繞核心的第二次查詢將被稱爲子查詢和外查詢僅僅是外部查詢,沒有一子查詢。 我可以用Doctrine2構建subSubQuery。

但我不能建子查詢這樣

Select product_id from ($subSubQuery->getQuery()->getDQL()) 

我想要做的子查詢這樣

$subQuery = $repositoryProduct->createQueryBuilder('product'); 
$subQuery->add('select', 'product_id'); 
$subQuery->add('from',$subSubQuery->getDQL()); 
// However to set an alias is a miracle for me, this didnt work off course 
$subQuery->add('as','tmp'); 

這是子查詢。 我也不能建立外部查詢

Select * from abc where abc.x in ($subQuery->getQuery()->getDQL()) 

我想這樣做,這樣

$query->where(
    $query->expr()->in('product.id', $subQuery->getDQL()) 
); 

但我會這樣跟Doctrine2建立這樣的:

我這樣下來,我嘗試 - > getSQL(), - > getDQL(),我嘗試儘可能多地檢測到這個問題的解決方案適當的小步驟,我已經嘗試儘可能多的關鍵字在谷歌,我的手指能寫...我希望有人可以幫助我找到解決辦法...

非常感謝每個有用的建議。

回答

0

我知道,報表這樣的工作:

$qbGames->andWhere($qbGames->expr()->in('game.id',$qbGameId->getDQL())); 

你的問題是一種難以效仿。考慮使用pastebin來顯示當前存在的所有映射。然後可能會提出一個簡單的查詢?

我的$ qbGameId查詢與建:

​​
+0

我做到了這樣,但我得到一個錯誤「[語義錯誤] 0行,列20附近的 'SELECT COUNT(productxattribut.id),'因爲$ subQuery-> getDQL()返回「SELECT count(p0_.id)AS sclr0,p1_.id AS id1 FROM produkt_x_attribute p0_ INNER JOIN produktattribut p2_ ON p0_.produktattribut_id = p2_.id INNER JOIN產品p1_ ON p0_.produkt_id = p1_.id WHERE(p2_.schluessel =?AND p0_.stringType =?)OR(p2_.schluessel =?AND p0_.stringType =?)GROUP BY p0_.produkt_id HAVING count (p0_.id)=?「 – user2718529

+0

是的。問題是我不知道你實際嘗試了什麼查詢。你的問題太多了。嘗試更新您的問題並說出類似的內容:我嘗試了這個確切的查詢,並收到此錯誤消息。我更新了我的答案,可能你沒有在你的子查詢中使用distinct? – Cerad