2014-06-20 3 views
0

MySql에서 조인 된 테이블이 3 개 있습니다. 직원 데이터 모든 고객 전하를 저장 조건부 WHERE 절이있는 테이블의 필드를 선택하십시오.

cobranca

를 저장하는, 고객 데이터

funcionario를 저장

contratos.

요금 status을 기반으로 보고서를 생성하고 싶습니다. 그러나 각 고객 요금은 많은 status이며, 현재 status을 검색하고 싶습니다.

다음 코드는 cobrancas 테이블에서 마지막 업데이트를 반환합니다.

SELECT cob.status, cob.created, con.data_venda, cpn.contrato, con.razao_social, con.cnpj, con.valor, f.nick 
FROM cobrancas cob 
LEFT JOIN contratos con 
ON c.id = cob.contrato 
LEFT JOIN funcionarios f 
ON f.id = cob.cobrador 
WHERE 1=1 
ORDER BY cob.created DESC 
LIMIT 1 

그러나 status 필터없이 반환됩니다. cob.status = 'x' 같은 WHERE 절을 넣으면이 status 함께 마지막 레코드를 반환하지만 현재 수 없습니다. 그렇다면 WHERE 절에 cob.status이 현재 status인지 확인하여 목록에 넣을 지 여부를 결정할 수 있습니까? 같은 뭔가 :

WHERE IF(cob.status == the last status inserted AND cob.status == 'x')

당신은 내가 원하는 것을 이해 할 수 있습니까? 고맙습니다.

+0

이 어떻게 현재의 상태가 어떤 결정합니까 사용 하는가? – VMai

+0

첫 번째 쿼리에서 ** ORDER BY DESC ** 및 ** LIMIT 1 **을 사용합니다. 그러나 Where 절에서이 작업을 수행하는 방법을 모르겠습니다. 나는 날짜와 시간을 저장하는 ** 생성 된 ** 필드를 가지고있다. – cbaracat

+0

그리고 문제가 어디 있니? – VMai

답변

0

하나의 해결책은 하위 쿼리

select * from 
(
SELECT cob.status, cob.created, con.data_venda, cpn.contrato, con.razao_social, con.cnpj, con.valor, f.nick 
FROM cobrancas cob 
LEFT JOIN contratos con 
ON c.id = cob.contrato 
LEFT JOIN funcionarios f 
ON f.id = cob.cobrador 
WHERE 1=1 
ORDER BY cob.created DESC 
LIMIT 1 
) where status = 'X' 
+0

다른 테이블을 외부 쿼리에 조인하면 더 빠릅니다 –