2011-02-17 5 views
0
에 속하는 회원들에게 이메일을 보내기

내 쿼리 아래,의 MySQL 및 PHP : 지난 3 개 활성 스레드

SELECT ID, Approved, RecipientID, RecipientScreenname, RecipientEmail 
FROM 
(
SELECT 
root_strings.str_id as ID, 
root_strings.str_approved as Approved, 
root_strings.mem_id as RecipientID, 

root_members_cfm.mem_screenname as RecipientScreenname, 
root_members_cfm.mem_firstname as RecipientFirstname, 
root_members_cfm.mem_email as RecipientEmail 

FROM root_strings 

LEFT JOIN root_members_cfm 
ON root_members_cfm.mem_id = root_strings.mem_id 

WHERE root_strings.parent_id = '1' 
AND root_strings.mem_id IS NOT NULL 

UNION ALL 

SELECT 
root_strings.str_id as ID, 
root_strings.str_approved as Approved, 
root_strings.mem_id as RecipientID, 

root_users.usr_screenname as RecipientScreenname, 
root_users.usr_firstname as RecipientFirstname, 
root_users.usr_email as RecipientEmail 

FROM root_strings 

LEFT JOIN root_users 
ON root_users.usr_id = root_strings.usr_id 

WHERE root_strings.parent_id = '1' 
AND root_strings.usr_id IS NOT NULL 

) SQ 
ORDER BY ID DESC 
LIMIT 0,3 

그것은이 같은 결과를 반환, 내 블로그의 commnets에서 지난 3 개 활성 스레드를 얻을 것이다

ID  Approved RecipientID RecipientScreenname RecipientEmail  
14  1   3   x     [email protected] 
13  n/a  NULL  y     [email protected] 
13  n/a  NULL  y     [email protected] 

다음은 각자에게 이메일을 보내 드리겠습니다.

foreach($items_thread as $item_thread) 
{ 
    $sentmail = mail($item_thread['RecipientEmail'],$email_subject,$email_content,$email_headers); 
} 

하지만 당신은 내가 이메일의 두 배 y를 보낼 것 같이 가깝게 볼 때 논리가 올바르지 않습니다!

y은 하나의 이메일을 받아야합니다. SQL 쿼리 또는 PHP 코드를 수정해야합니까?

답변

0

NULL!=NULL (아니요, NULL=NULL)이므로 DISTINCT은 두 번째와 세 번째 결과가 같지 않다고 간주합니다. RecipientID가 0 (예 : COALESCE(RecipientID,0) AS RID)으로 표시되도록 쿼리를 변경하면 문제가 사라집니다.

+0

아니면이'대신 별개의 recipientemail'을 선택하고, array_unique를 사용하는 지금은 이것에 대한 해결책을 가지고 있습니다. –