2012-06-12 6 views
1

두 테이블의 사용자 및 작업 _ 테이블이 있습니다. 이제 사용자 테이블 필드에서 필터링하여 work_orders 결과를 가져와야합니다.왼쪽 조인 사용 및 조인 된 테이블의 다른 필드

다음 쿼리로 결과를 반환하지 않았습니다.

SELECT `work_orders`.`id` as id, `work_orders`.`type` as type 
    , `work_orders`.`title` as title, `work_orders`.`status` as status 
    , `work_orders`.`publish_date` as publish_date 
    , `work_orders`.`priority` as priority, `work_orders`.`assigned_to` as assigned_to 
    , `work_orders`.`client_id` as client_id, `work_orders`.`due_date` as due_date 
    FROM (`work_orders`) 
    LEFT JOIN `users` 
    ON `users`.`id` = `work_orders`.`assigned_to` 
WHERE `work_orders`.`status` != 'closed' 
    AND users.manager_id = '143' 
ORDER BY `work_orders`.`id` DESC 
LIMIT 30 
+1

하는 것은 약간의 시간이 걸릴하시기 바랍니다. 또한 테이블의 별칭을 조사 할 수도 있습니다. 예를 들어'wo.id를 work_orders에서 선택하십시오. 모든 열/테이블에서 역 따옴표를 사용할 필요가 없습니다. 예약 된 이름 만 사용하는 곳입니다. – Ben

+0

where 절을 제거하고 어떤 종류의 히트를 얻을 수 있는지 확인하십시오. –

+0

다음 번에 벤을 확인합니다. – Yalamber

답변

0

WHERE 절이 모든 결과를 필터링하고 있습니까?

또한 특정 사용자에게만 적용되는 work_orders를 표시하려면 LEFT JOIN을 INNER JOIN으로 변경하거나 EXISTS를 사용하십시오. 이 읽을 수 있도록 질문을 작성할 때

이 시도

...

SELECT field1, field2, ... 
FROM work_orders 
WHERE EXISTS (
    SELECT 1 
    FROM users 
    WHERE users.id = work_orders.assigned_to 
     AND manager_id='143' 
) 
+0

안녕하십니까, 특정 사용자에게만 적용되는 work_orders이지만 사용자는 manager_id에 다시 연결됩니다. 이제 사용자 테이블의 필드 인 manager_id로 work_orders를 필터링해야합니다. – Yalamber

+0

그래서 특정 관리자 아래에서 모든 작업 주문을 얻으려고합니다. 옳은? –

+0

네, 그렇게하려고합니다. – Yalamber