[SQL] 교리 2의 .. IN 하위 쿼리를 수행
SQL교리 2의 .. IN 하위 쿼리를 수행
나는 특정 항목과 모든 주문에서 주문 항목을 선택하고 싶습니다. SQL에서 나는 이런 식으로 그것을 할 것입니다 :
SELECT DISTINCT i.id, i.name, order.name
FROM items i
JOIN orders o ON i.order_id=o.id
WHERE o.id IN (
SELECT o2.id FROM orders o2
JOIN items i2 ON i2.order_id=o2.id AND i2.id=5
)
AND i.id != 5
ORDER BY o.orderdate DESC
LIMIT 10
어떻게 쿼리 빌더이 쿼리를 할 것인가?
해결법
-
==============================
1.이것은 내가 그것을 시도 할 방법입니다
이것은 내가 그것을 시도 할 방법입니다
/** @var Doctrine\ORM\EntityManager $em */ $expr = $em->getExpressionBuilder(); $em->createQueryBuilder() ->select(array('DISTINCT i.id', 'i.name', 'o.name')) ->from('Item', 'i') ->join('i.order', 'o') ->where( $expr->in( 'o.id', $em->createQueryBuilder() ->select('o2.id') ->from('Order', 'o2') ->join('Item', 'i2', \Doctrine\ORM\Query\Expr\Join::WITH, $expr->andX( $expr->eq('i2.order', 'o2'), $expr->eq('i2.id', '?1') ) ) ->getDQL() ) ) ->andWhere($expr->neq('i.id', '?2')) ->orderBy('o.orderdate', 'DESC') ->setParameter(1, 5) ->setParameter(2, 5) ;
나는 물론이 테스트하고 모델에 대한 몇 가지 가정을하지 않았다. 가능한 문제 :
결론이는 처음 작동하지 않을 수 있습니다, 그러나 확실하게 바른 길에 당신을 둘 것입니다. 이후 우리에게 마지막 100 % 정답을 말하지 마십시오.
-
==============================
2.그냥 마지막 코멘트 피하기 혼란은 clang1234에 의해 기록했다.
그냥 마지막 코멘트 피하기 혼란은 clang1234에 의해 기록했다.
DQL 쿼리 예는 정말 작동합니다. 그것은 사실 그 expr->에서 ()이 케이스 DQL 문자열, 배열에 두 번째 매개 변수를 캐스팅합니다. 그것은 무엇을, 그냥 첫 번째 요소로 DQL 쿼리 문자열 배열을 만들 수 있습니다. 즉하여 EXPR \ Func을은을 위해 배열을 기다리고 정확히입니다. 그것은 좀 더 깊이 교리 2 코드에서 DQL 쿼리 문자열 배열 요소가 제대로 관리 될 것입니다. () (어레이는 IN에 내파 얻을 자세한 내용 DBAL / 플랫폼 / AbstractPlatform.php 방법 getInExpression 참조)
from https://stackoverflow.com/questions/6637506/doing-a-where-in-subquery-in-doctrine-2 by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 문에 필드에서 앞의 0을 제거 (0) | 2020.03.24 |
---|---|
[SQL] 테이블 행 수를 얻을 수있는 가장 효율적인 방법 (0) | 2020.03.24 |
[SQL] 저장 프로 시저를 파라미터들의 배열을 전달 (0) | 2020.03.24 |
[SQL] 어떻게 아약스를 통해 여러 데이터 필드를 보내? [닫은] (0) | 2020.03.24 |
[SQL] SQL 데이터베이스의 기본 키와 같은 문자열 (0) | 2020.03.24 |