2013-07-02 2 views
0

메일 링리스트를 만들기 위해 포기 된 카트 쿼리가 있습니다.고객이 이미 다른 조건을 충족하더라도 동일한 테이블에 이미 존재하는 경우 MySQL 쿼리의 결과 제외

select * 
from cart 
where order_status = '' 
and date_ordered = '0000-00-00' 
and customer_email IS NOT NULL 
and date_added > subdate(current_date, 1) 
and date_added < current_date 
and brand Is Not Null 
and customer_email != ' ' 
group by customer 
order by date_added desc; 

그래서 지금 내가하고 싶습니다 : 내가하고 싶지 않은 한 가지는 내가 그 아래에 추가하는 방법에 대한 갈 것이라고 어떻게 자신의 포기 카트 기간이 지났 주문했다 전자 우편 사람이다 같은 날 주문에 대해 고객 ID가있는 레코드를 제외하십시오. 주문을했다면 다음날 이메일을 보내지 마시기 바랍니다.

미리 감사드립니다.

답변

1

왼쪽 이메일 주소와 다른 주문 (다시 여기에 카트를 가정) 명령을 포함하는 테이블에 대해 조인

select a.* 
from cart a 
LEFT OUTER JOIN cart b 
ON a.customer_email = b.customer_email AND a.order_id != b.order_id 
where a.order_status = '' 
and a.date_ordered = '0000-00-00' 
and a.customer_email IS NOT NULL 
and a.date_added > subdate(current_date, 1) 
and a.date_added < current_date 
and a.brand Is Not Null 
and a.customer_email != ' ' 
AND b.customer_email IS NULL 
group by a.customer 
order by a.date_added desc; 
+0

안녕 거기에 NULL을 확인 (이 부분을 확인하기 위해 ORDER_ID 가정) 이것은 확실히 올바른 방향으로 가고 있습니다. 왜 customer_email에서 Null을 찾고 싶은지 혼란스러워합니다. 어제/오늘 이후에 주문 날짜가있는 다른 주문이 있으면 실제로 행을 제외하고 싶습니다. 나는 아마 그것을 잘못 설명했다고 생각한다. – Daffy

+0

그것은 그것이하는 것이다. LEFT JOIN을 수행하므로 일치하는 레코드가 있는지 여부에 관계없이 행을 가져옵니다. 그런 다음 LEFT JOIN 된 테이블의 필드 중 하나에서 NULL을 확인하여 일치 항목이있는 곳을 제외합니다 – Kickstart

+0

그리고 그렇게합니다 ... 많은 사과, 내 결과가 잘못 참조됩니다 - 원래 쿼리의 두 사람 모두 주문한 상태로 돌아 왔으며 어느 버전도 귀하의 버전에 나타나지 않았습니다. 귀하의 도움에 너무 감사드립니다. 또한 위의 쿼리 구조를 복사하는 멍청한 작업을 수행하면 도움이됩니다 !!! – Daffy

관련 문제