2012-07-13 2 views
0

젠드 프레임 워크에서 사용하고자하는 다소 복잡한 쿼리가 있습니다. 이 작업을 수행하기 위해 하위 쿼리에서 조인으로 쿼리를 변환해야했습니다.서브 쿼리와 동일한 작업을 수행하고 zend 프레임 워크에서 사용하기 위해 join과 count를 사용하는 Mysql의 복잡한 쿼리

이것은 거래입니다. 적절한 정보를 구성하기 위해 연결해야하는 테이블이 3 개 있습니다. 이것은이 쿼리를 사용하여 수행 할 수 있습니다

SELECT 
ol.orders_id, 
ol.photos_to_add, 
ol.locations_id, 
l.name, 
(select 
    count(*) 
    from 
    photos as p 
    where 
    p.location_id = ol.locations_id and p.per_order = ol.orders_id) 
    as added 
FROM `order_has_locations` AS ol, 
`locations` AS l 
WHERE ol.orders_id = 1 and l.id = ol.locations_id 

나는 그것을 조인을 변환하려고 :

SELECT ol.orders_id, ol.locations_id, ol.photos_to_add, l.name, count(p.id) AS added 
FROM order_has_locations as ol 
INNER JOIN locations as l on l.id = ol.locations_id 
left outer join photos as p on p.per_order = ol.orders_id 
where p.location_id = ol.locations_id and ol.orders_id = 1 

하지만 0의 사진에 대한 정보가없는 이런 식으로. 때문에 p.location_id이다

나는 아무 소용이 여러 가지 방법을 시도 ...

답변

0

는 = ol.locations_id, 절을 가입하는 곳에서이 조건을 이동, 그것을 작동합니다. 현재 where 절에서 조인이 평가 된 후에 적용되므로 0 개의 사진에서이 조건은 p.location_id = null로 밝혀 지므로 false가되어 행이 필터링됩니다.

SELECT ol.orders_id, ol.locations_id, ol.photos_to_add, l.name, count(p.id) AS added 
    FROM order_has_locations as ol 
INNER JOIN locations as l on l.id = ol.locations_id 
    LEFT outer join photos as p on p.per_order = ol.orders_id 
    AND p.location_id = ol.locations_id 
WHERE ol.orders_id = 1 
GROUP BY ol.orders_id, ol.locations_id, ol.photos_to_add, l.name 
+0

글쎄,이게 효과가 있었으면 좋겠다.하지만 불행히도 그렇지 않다. 반환 값은 원래의 조인 쿼리와 같다. –

+0

몇 가지 예를 들려 줄 수 있습니까? 입력 데이터 및 예상 출력 데이터 –

+0

그룹이 누락되었습니다 ... 수정되었습니다. 지금 시도하십시오 ... –

0

집계 함수에는 GROUP BY를 사용해야합니다. 왼쪽 조인은 외부 조인이므로 정의 할 필요는 없습니다.

SELECT ol.orders_id, ol.locations_id, ol.photos_to_add, l.name, count(p.id) AS added 
FROM order_has_locations as ol 
INNER JOIN locations as l on l.id = ol.locations_id 
LEFT JOIN photos as p on p.per_order = ol.orders_id 
where p.location_id = ol.locations_id and ol.orders_id = 1 
GROUP BY p.id