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