Anton: 1 oder 2 Queries nötig?

Beitrag lesen

ich wundere mich immer wieder, wie ein brett vor dem kopf überhaupt gehalten werden kann. ich hoffe, dass es nicht angenagelt ist....

Ich auch!!!

wie auch immer, bei einem outer join kannst du zu jeden datensatz unter anderem die personen_id, namen und email-adresse anzeigen lassen und am besten nach der personen_id sortiert. die personen_id ist deshalb wichtig, weil namen durchaus gleich sein können. das wäre in etwa die abfrage.

Outer Joins benötige ich doch gar nicht. Es sind bereits alle Werte vergeben und zu jedem gibt ein entsprechende Zeile in der anderen Tabelle.

um nun nur einmal den namen anzeigen zu lassen und nicht für jede e-mail einmal, machst du nun in der schleife einen vergleich, ob sich die personen_id geändert hat. dazu speicherst du die letzte personen_id in eine variable ab und vergleicht sie mit den neuen datensatz. ist sie gleich, dann handelt es sich auch um die gleiche person und du zeigst nur die zusätzliche e-mail an. ist sie ungleich dann kommt eine neue person.

OK.

$sql = "SELECT c.id, c.pic, cf.email, cf.function,
               CONCAT(c.phone_country, ' ', c.fax_city, ' ', c.fax_no, ' ', c.fax_ext) fax,
        CONCAT(c.phone_country, ' ', c.phone_city, ' ', c.phone_no, ' ', c.phone_ext) phone,
        CONCAT(c.name_l, ', ', c.name_f) AS name,
        LOWER(CONCAT(c.name_f, '_', c.name_l)) AS folder
               FROM contacts c, lnk_company_contact lcc, contacts_functions cf
               WHERE (c.id = lcc.id_contact)
               AND   (c.public = 'j')
        AND   (cf.id = c.id)
               AND   (lcc.id_company = '350')
               ORDER BY c.name_l";
$res =& $db->query($sql);
$anzahl = count($res);
$obergrenze = $anzahl - 1;

while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
        $data[] = $row;
    }

$richtig[] = $data[0];
    $last_id = $richtig[0]['id'];

for ($i = 0; $i < $obergrenze; $i++) {
        if ($last_id != $data[$i]['id']) { // different person
            $last_id = $data[$i]['id'];
            $richtig[] = $data[$i];
        } else { // same person
            $richtig[$i-1]['email'][] = $row[$i]['email'];
        }
    }

print "<pre>";
print_r($richtig);
print "</pre>";

}

Dieser Code gibt mir nur den ersten Mitarbeiter aus. Und nur mit einer Email Adresse. Wo liegt der Fehler ?