Hallo,
habe jeweils 4 Tabellen : customer, bank, deliveryaddress und contact.
Primärschlüssel in "customer" ist "ID" und diese ID ist jeweils der Fremdschlüssel in den anderen Tabellen, welchen ich in allen Tabellen "customerID" genannt habe.
Nach Eingabe der KundenID lasse ich mir jeweils die persönlichen Daten des Kunden in "customer", seine Bankdaten in "bank", sowie seine Lieferadresse in "deliveryaddress"
als JSON ausgeben, was auch funktionniert.
Nun zu meiner Frage : ich habe eine vierte Tabelle angelegt ("contacts"), in der ich die verschiedenen Kontakte des Kunden anlege.
Bisher war es so, daß er nur jeweils eine Bank und eine Lieferadresse angeben kann. Nach der Abfrage erhielt ich dann auch genau einen Datensatz mit allen Angaben
der Tabellen customer, bank und deliveryaddress.
Was seine Kontakte angeht, möchte ich nun mehrere Eingaben ermöglichen.
Seit dem ich meine Datenbankabfrage für diese zusätzliche Tabelle ergänzt hab (also LEFT JOIN contact as co ON c.id = co.customerID hinzugefügt),
erhalte ich genau so viele Datensätze zurück wie ich für diese ID Kontakte angelegt habe.
D.h. wenn ich z.B. 3 Kontakte für einen Kunden anlege, erhalte ich dann 3 komplette Datensätze (ich erhalte also mehrmals die gleichen Daten für meine ersten 3 Tabellen
was natürlich nicht erwünscht ist) in meinem Response Array :
z.B. [{"id":1,"company":null,"familyName":"Müller", "name":"Max" ...,"emailContact":"xyz@xyz.de","phoneContact":"+4 9 123 123 123" ... },
[{"id":1,"company":null,"familyName":"Müller2", "name":"Max2" ...,"emailContact":"xyz2@xyz.de","phoneContact":"+ 49 123 123 123" ... },
[{"id":1,"company":null,"familyName":"Müller3", "name":"Max3" ...,"emailContact":"xyz3@xyz.de","phoneContact":"+ 49 123 123 123" ... }]
Wie kann ich meine Abfrage umändern, damit ich einen Datensatz ohne sich wiederholdende Daten erhalte ? Ist dies überhaupt möglich mit einer Abfrage ?
habe jeweils 4 Tabellen : customer, bank, deliveryaddress und contact.
Primärschlüssel in "customer" ist "ID" und diese ID ist jeweils der Fremdschlüssel in den anderen Tabellen, welchen ich in allen Tabellen "customerID" genannt habe.
Nach Eingabe der KundenID lasse ich mir jeweils die persönlichen Daten des Kunden in "customer", seine Bankdaten in "bank", sowie seine Lieferadresse in "deliveryaddress"
als JSON ausgeben, was auch funktionniert.
Nun zu meiner Frage : ich habe eine vierte Tabelle angelegt ("contacts"), in der ich die verschiedenen Kontakte des Kunden anlege.
Bisher war es so, daß er nur jeweils eine Bank und eine Lieferadresse angeben kann. Nach der Abfrage erhielt ich dann auch genau einen Datensatz mit allen Angaben
der Tabellen customer, bank und deliveryaddress.
Was seine Kontakte angeht, möchte ich nun mehrere Eingaben ermöglichen.
Seit dem ich meine Datenbankabfrage für diese zusätzliche Tabelle ergänzt hab (also LEFT JOIN contact as co ON c.id = co.customerID hinzugefügt),
erhalte ich genau so viele Datensätze zurück wie ich für diese ID Kontakte angelegt habe.
D.h. wenn ich z.B. 3 Kontakte für einen Kunden anlege, erhalte ich dann 3 komplette Datensätze (ich erhalte also mehrmals die gleichen Daten für meine ersten 3 Tabellen
was natürlich nicht erwünscht ist) in meinem Response Array :
z.B. [{"id":1,"company":null,"familyName":"Müller", "name":"Max" ...,"emailContact":"xyz@xyz.de","phoneContact":"+4 9 123 123 123" ... },
[{"id":1,"company":null,"familyName":"Müller2", "name":"Max2" ...,"emailContact":"xyz2@xyz.de","phoneContact":"+ 49 123 123 123" ... },
[{"id":1,"company":null,"familyName":"Müller3", "name":"Max3" ...,"emailContact":"xyz3@xyz.de","phoneContact":"+ 49 123 123 123" ... }]
Wie kann ich meine Abfrage umändern, damit ich einen Datensatz ohne sich wiederholdende Daten erhalte ? Ist dies überhaupt möglich mit einer Abfrage ?
SELECT
c.id, c.company, c.familyName, c.firstName, c.vat, c.street, c.postalCode, c.city, c.countryCode, c.country, c.dateOfBirth, c.phone, c.cellphone, c.email, c.fax,
c.website, c.status, c.created, c.modified, c.notice, c.salutation, b.bank, b.iban, b.account, b.bankCode, b.bic, d.deliveryName, d.deliveryStreet, d.deliveryPostalCode,
d.deliveryCountryCode, d.deliveryCity, d.deliveryCountry, co.name, co.mission, co.emailContact, co.phoneContact, co.cellphoneContact
FROM customer as c
LEFT JOIN bank as b
ON c.id = b.customerID
LEFT JOIN deliveryAddress as d
ON c.id = d.customerID
LEFT JOIN contact as co
ON c.id = co.customerID
WHERE c.id = 1
c.id, c.company, c.familyName, c.firstName, c.vat, c.street, c.postalCode, c.city, c.countryCode, c.country, c.dateOfBirth, c.phone, c.cellphone, c.email, c.fax,
c.website, c.status, c.created, c.modified, c.notice, c.salutation, b.bank, b.iban, b.account, b.bankCode, b.bic, d.deliveryName, d.deliveryStreet, d.deliveryPostalCode,
d.deliveryCountryCode, d.deliveryCity, d.deliveryCountry, co.name, co.mission, co.emailContact, co.phoneContact, co.cellphoneContact
FROM customer as c
LEFT JOIN bank as b
ON c.id = b.customerID
LEFT JOIN deliveryAddress as d
ON c.id = d.customerID
LEFT JOIN contact as co
ON c.id = co.customerID
WHERE c.id = 1
Kommentar