Brad Fletcher
Brad Fletcher

Reputation: 3593

Prevent duplicates within FOREACH loop/statement

I am using this code to send out emails to my relevent partners, the problem I have is that sometimes the partner ID comes up twice and send the partner 2 x emails (duplicate), how can I prevent this?

$get_partner_id = "SELECT partner_id FROM partners_locations WHERE location_id ='$location_id'";

if ($partner_ids = $connect->query($get_partner_id)) {
  foreach ($partner_ids as $partner_id) {
    $partner_id = $partner_id['partner_id'];

    //CONVERT PARTNER IDS TO RELATED PARTNER NAME AND SEND
    $get_partner_names = "SELECT partner_name FROM partners WHERE partner_id ='$partner_id' AND active ='yes'";

    if ($partner_names = $connect->query($get_partner_names)) {
        foreach ($partner_names as $partner_name) {
        $partner_name = $partner_name['partner_name'];

        // GET ADMIN EMAIL TEMPLATE
        ob_start();
        include (TEMPLATEPATH . '/quote/admin-email-template.php'); 
        $admin_message = ob_get_clean();

        @mail("[email protected]", "Referral for " . $partner_name . "", $admin_message, $admin_headers);
      }
    } 
    else {

    }                                                           
  }
} 
else {

}

Upvotes: 0

Views: 105

Answers (1)

Gordon Linoff
Gordon Linoff

Reputation: 1270843

First, simplify your code to just use a single query. In general, when working with SQL, you don't need loops in the application code. Use a JOIN:

SELECT p.partner_name
FROM partners_locations pl JOIN
     partners p
     ON p..partner_id = p.partner_id AND p.active ='yes'"
WHERE pl.location_id = '$location_id';

Next, you probably have a data problem, where partners are listed multiple times in the data, somehow. You might want to investigate that, if these values should be unique. In the meantime, you can use SELECT DISTINCT:

SELECT DISTINCT p.partner_name
FROM partners_locations pl JOIN
     partners p
     ON p..partner_id = p.partner_id AND p.active ='yes'"
WHERE pl.location_id = '$location_id';

Upvotes: 3

Related Questions