Fehler bei Group_Concat

papst

Neuer Benutzer
Beiträge
2
Hey leute
Ich habe folgendes problemchen:
ich frage mit der Abfrage
Code:
SELECT perID, perVorname,
GROUP_CONCAT(telNummer ORDER BY telNummer DESC SEPARATOR ', ') AS Telefonnummern,
GROUP_CONCAT(emlAdresse ORDER BY emlAdresse DESC SEPARATOR ', ') AS EMailadrssen,
perSchwimmer, perGeschlecht FROM tblPersonen INNER JOIN ( tblStati INNER JOIN (
tblVeranstaltungen INNER JOIN tblTeilnahmen ON frzID = tnmfrzsemIDRef ) ON staID =
tnmstaIDRef ) ON perID = tnmperIDRef  LEFT JOIN tblEmail ON (emlperIDRef = perID) LEFT JOIN
tblTelefon ON (telperIDRef = perID) GROUP BY perID, perVorname, staName, frzID HAVING (
((staName) = 'Teilnehmer') AND ( (frzID) ='10') )
die Kontakt informationen von personen ab.
Dabei habe ich sowohl für email als auch für telefon eine eigene Tabellen.
Um bei mehrerer z.b. telefonnummern die hintereinander zu reihen verwende ich die Group_Concat function.
wenn ich nun von beiden kontakt infos gleichviel habe macht das keine probleme
habe ich allerdings z.b. 2 telefonnummern und nur eine email adresse wird mir die email adresse doppeltabgezeigt.

ich vermutemal das es am JOIN bereich liegt, weiß aber nicht wie ich das beheben könnte

lg papst
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
Hey leute
Ich habe folgendes problemchen:


lg papst

Der Papst, soso, ...

Dein Problem kann ich nachvollziehen:

Code:
test=*# select * from person ;
 id | name
----+-------
  1 | name1
  2 | name2
  3 | name3
(3 rows)

test=*# select * from mail ;
 p_id |  adr
------+-------
    1 | mail1
    1 | mail2
    1 | mail3
    2 | mail4
(4 rows)

test=*# select * from phone ;
 p_id | nummer
------+--------
    1 | phone1
    2 | phone2
    2 | phone3
(3 rows)

test=*# select person.name, array_to_string(array_agg(mail.adr),', ') as mail, array_to_string(array_agg(phone.nummer),', ') as phone from person left join mail on person.id=mail.p_id left join phone on person.id=phone.p_id group by person.name;
 name  |        mail         |         phone
-------+---------------------+------------------------
 name1 | mail3, mail2, mail1 | phone1, phone1, phone1
 name2 | mail4, mail4        | phone2, phone3
 name3 |                     |
(3 rows)

und lösen:

Code:
test=*# select person.name, array_to_string(array_agg(distinct mail.adr),', ') as mail, array_to_string(array_agg(distinct phone.nummer),', ') as phone from person left join mail on person.id=mail.p_id left join phone on person.id=phone.p_id group by person.name;
 name  |        mail         |     phone
-------+---------------------+----------------
 name1 | mail1, mail2, mail3 | phone1
 name2 | mail4               | phone2, phone3
 name3 |                     |
(3 rows)

Ist jetzt PostgreSQL, vielleicht geht das so auch in MySQL, probier es aus. Vielleicht hilft ja auch ein Gebet ;-)

Andreas
 

papst

Neuer Benutzer
Beiträge
2
Hey
vielen dank für die schnelle hilfe
also in mysql muss das dann so aussehen:
Code:
select person.name, GROUP_CONCAT(mail.adr ORDER BY mail.adr DESC SEPARATOR ', ') as mail, GROUP_CONCAT(phone.nummerORDER BY phone.nummer DESC SEPARATOR ', ') as phone from person left join mail on person.id=mail.p_id left join phone on person.id=phone.p_id group by person.name;

lg papst

ps: so neben bei: wie bekommt ihr eigentlich immer diese schönen tabellen hin?? selbst zeichnen tut ihr die doch bestimmt nicht :D:D
 
Werbung:
Oben