1:n Beziehungen in einem Bericht darstellen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

seve1980
*
Beiträge: 10
Registriert: Fr, 09.04.2010 12:45

1:n Beziehungen in einem Bericht darstellen

Beitrag von seve1980 »

Hallo,
Ich hoffe das diese Frage nicht schon wo anders beantwortet wurde und ich nur zu doof zum finden war.
Also es geht um folgendes, ich habe eine 1:n Beziehung zwischen mehreren Tabellen. Ein Tabelle mit dem Vornamen und Nachnamen eins Patienten und eine Tabelle wo die Erkrankungen die er hat drin stehen und eine Tabelle mit verordneten Anwendungen. Im Formular funktioniert das auch hervorragend, nun will ich einen Bericht ausgeben, in dem oben der Name steht und dann kommen eine Tabelle mit den Medikamenten und eine Zweite mit den Anwendungen.
Eines von beidem kann ich ausgeben, abe nicht beide.
Vielen Dank schon im Vorraus für eure Hilfe.

seve1980
ddraht
***
Beiträge: 60
Registriert: Di, 06.04.2010 16:35
Wohnort: Altenberge

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von ddraht »

Hi,
ich würde das so lösen, zuerst kreierst zu eine Abfrage. Dort kannst du die Tabellen verknüpfen.

Dann machst du einen Bericht auf Basis der Abfrage.

Gruß
Dieter
MySQL 5.5.9
Oo 3.3.0, Build 9567
Mac os x 10.7.2
seve1980
*
Beiträge: 10
Registriert: Fr, 09.04.2010 12:45

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von seve1980 »

Danke für deine Idee, das habe ich schon gemacht (hab glaub ich nicht richtig beschrieben wass ich brauch), aber wenn ich Abfrage mache dann kommt folgendes:

Name Vorname Anwedung Erkrankung
Max Muster Schwimmen Husten
Max Muster Schwimmen Schnupfen
Max Muster Turnen Husten
Max Muster Turnen Schnupfen
-----
Das will ich so anordnen im Bericht:
Name : Max
Nachname: Muster
Erkrankungen:
-------------------------------
Husten
Schnupfen

Anwendungen:
--------------------------------
Schwimen
Turnen

==========================
Dann kommt der Nächste.

Und ich komm nicht drauf wie ich das machen kann.

Vielen Dank schon mal im Vorraus

Grüße
Seve1980
ddraht
***
Beiträge: 60
Registriert: Di, 06.04.2010 16:35
Wohnort: Altenberge

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von ddraht »

Hallo,

du musst beim Erstellen des Berichtes gruppieren, z.B. nach dem Namen.

d.h. alle Datensätze mit dem gleichen Namen werden geschrieben.
Allerdings kommt dennoch immer jeweils der Vorname erneut.

Daher ist es besser vorher mit Abfragen zu arbeiten. z.B. "Name"+space+"Vorname"
dann kann auf der Grundlage der Bericht gruppiert werden.

Kennst du Abfrage?

Gruß
Dieter
MySQL 5.5.9
Oo 3.3.0, Build 9567
Mac os x 10.7.2
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von AndreasJBittner »

Hallo,

wenn die Abfrage steht geh mal in die SQL-Ansicht und trage hinten (ggf. ändern) "GROUP BY Nachname, Vorname, Anwendung" (ohne Tüddelchen) ein, dann müßte herauskommen, was Du brauchst.

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
seve1980
*
Beiträge: 10
Registriert: Fr, 09.04.2010 12:45

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von seve1980 »

Vielen Dank für eure Hilfe,
Aber ich komm damit nicht zurecht, irgendwie haut das noch nicht hin. ich kann euch ja mal den SQL Code posten. Leider habe ich von SQL kaum Ahnung.

Code: Alles auswählen

SELECT "Patient"."ID", "Patient"."Nachname", "Patient"."Vorname", "Anwendungen"."Anwedungen", "Medikation_alt"."Namen", "Medikation_alt"."Dosis", "Medikation_alt"."Patientenkennung" FROM "Medikation_alt" AS "Medikation_alt", "Patient" AS "Patient", "Anwendungen" AS "Anwendungen" WHERE "Medikation_alt"."Patientenkennung" = "Patient"."ID" AND "Anwendungen"."Patientenkennung" = "Patient"."ID" ORDER BY "Patient"."Nachname" ASC, "Patient"."Vorname" DESC
Und im Bericht sollten dann die Anwendungen und die Medikamente als Tabelle aufgelisitet werden. Im Moment funktioniert es nur so das ich im Bericht nach Namen sortirt bekomme und dann wird z.B. ein Medikament aufgelistet, dann kommen die Anwedungen, dann kommt das nächste Medikamment und wieder alle Anwendungen. Und eigentlich will ich nur eine Tabelle mit allen Medikamenten und eine zweite mit allen Anwendungen und as am besten in einem Bericht. Ich hoffe das geht ;-) (oder ihr schafft es das mir beizubringen ;-) )
Viele Grüße
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von AndreasJBittner »

Hallo,

probier mal:

Code: Alles auswählen

SELECT "Patient"."ID", "Patient"."Nachname", "Patient"."Vorname", "Anwendungen"."Anwedungen", "Medikation_alt"."Namen", "Medikation_alt"."Dosis", "Medikation_alt"."Patientenkennung" FROM "Medikation_alt" AS "Medikation_alt", "Patient" AS "Patient", "Anwendungen" AS "Anwendungen" WHERE "Medikation_alt"."Patientenkennung" = "Patient"."ID" AND "Anwendungen"."Patientenkennung" = "Patient"."ID" 
 **GROUP BY "Patient"."Nachname", "Patient"."Vorname", "Anwendungen"."Anwedungen" **
ORDER BY "Patient"."Nachname" ASC, "Patient"."Vorname" DESC
ohne die **, die hab ich eingetragen, damit es klarer wird.
Was heißt "...eigentlich will ich nur eine Tabelle mit allen Medikamenten und eine zweite mit allen Anwendungen..."?
Das geht mit

Code: Alles auswählen

SELECT "Anwendungen"."Anwedungen" FROM "Medikation_alt" AS "Medikation_alt", "Anwendungen" AS "Anwendungen" WHERE "Anwendungen"."Patientenkennung" = "Patient"."ID" 
GROUP BY  "Anwendungen"."Anwedungen"
ORDER BY "Anwendungen"."Anwedungen" DESC
aber das meinst Du vermutlich nicht.

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
seve1980
*
Beiträge: 10
Registriert: Fr, 09.04.2010 12:45

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von seve1980 »

Hi,
habe es mit deinem Code versucht und die ** entfernt. Leider bekomme ich dann folgenden Fehler, siehe Bildchen. Das OOO hat glaub ich ein Problem mit Gruppierungen, die funktionieren nicht. Auch wenn ich sie über die Entwurfansicht versuche zu machen, es geht ned.
Ich habe deinen zweiten Code auch probiert, hat aber nicht funktioniert, angeblich findet er eine spalte nicht aber ich kann keinen Fehler finden, werde es aber weiter probieren.
AndreasJBittner hat geschrieben: Was heißt "...eigentlich will ich nur eine Tabelle mit allen Medikamenten und eine zweite mit allen Anwendungen..."?
Damit meinte ich das als erstes der Patienten Name kommt, und dann kommen alle dem Patienten verschriebenen Medikamente, z.b. als Tabelle oder als Liste und danach kommen alle Anwendungen die er bekommt. Dann kann ich quasi ein Patientenbogen erstellen damit. Ist halt ein bisschen blöd zu erklären, aber du kannst es dir so in etwa vorstellen?

Viele Grüße
seve1980
Dateianhänge
Wenn ich deinen Code verwende kommt dieser Fehler, was hat der zu bedeuten?
Wenn ich deinen Code verwende kommt dieser Fehler, was hat der zu bedeuten?
Fehler.png (7.02 KiB) 1459 mal betrachtet
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von AndreasJBittner »

Hallo Seve,

nein, OOo hat kein Problem mit Gruppierungen, ich habe das Statement wohl fehlerhaft aufgeschrieben. Du kannst die Gruppierung für die gewünschten Parameter in der Abfragemaske unter Kriterien > Gruppierung auswählen, dann fallen jedenfalls die Tipp- oder Denkfehler von mir weg. Übrigens fehlt in meinem Statement ein 'n' in "..."Anwendungen"."Anwe{hier!}dungen" **", vielleicht liegt es daran. Dann gibt es das zu gruppierende Ding ja nicht.

Ja, verstehe ich. Probier mal

Code: Alles auswählen

SELECT "Patient"."ID", concat("Patient"."Nachname",
concat(", ", "Patient"."Vorname")) AS "VollerName", 
"Anwendungen"."Anwendungen", "Medikation_alt"."Namen" 
FROM "Medikation_alt" AS "Medikation_alt", "Patient" AS "Patient", "Anwendungen" AS "Anwendungen" 
WHERE "Medikation_alt"."Patientenkennung" = "Patient"."ID" AND "Anwendungen"."Patientenkennung" = "Patient"."ID" 
GROUP BY "VollerName", "Anwendungen"."Anwendungen", "Medikation_alt"."Namen" 
ORDER BY "VollerName" ASC
Hier hab ich das fehlende N ergänzt und den Namen zum VollenNamen zusammengefaßt. Es müßte herauskommen:
| ID | VollerName | Anwendung | Medikation |
| 1 | Müller, Willi | Massage | Massageöl |
| | | Verband | Mullbinde |
| 2 | Bittner, A.. | .......

Ich weiß nur nicht, ob das mit den Anwe{}dungen so in Deiner DB steht, Du wirst ja den SQL-Code kopiert haben.

Viele Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
seve1980
*
Beiträge: 10
Registriert: Fr, 09.04.2010 12:45

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von seve1980 »

Jo den Schreibfehler mit der Anwendung habe ich auch in den Tabellen aber das habe ich geändert. Das was du mir aufgeschrieben hast geht schon in die Richtung
| ID | VollerName | Anwendung | Medikation |
| 1 | Müller, Willi | Massage | Massageöl |
| | | Verband | Mullbinde |
| 2 | Bittner, A.. | .......
und im Berich soll dann kommen:
Müller, Willi
Andwendungen:
- Massage
- Verband
Medikamente:
- Massageöl
- Mullbinde

Bittner, A...
wie bkomme ich das nun hin?
Sorry meine Fragen, bin mit dem Ding ein bisschen überfordert.

Grüße
Seve
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von AndreasJBittner »

Hi Seve,

klappt denn die gruppierende Abfrage jetzt? Dann mußt Du Dich nun mit Reports beschäftigen. Hast Du den Sun Report Generator installiert? Probier zuerst mal, aus der Abfrage einen automatischen Bericht zu erzeugen, den kannst Du dann bearbeiten und so hinpfriemeln, wie Du es brauchst.
Mit dem Reportgenerator hab ich so gut wie nichts gemacht, meist vernudel ich meine Daten in MySQL und am Ende kommt nur eine Tabelle in ein Writer-Dokument. Da das im Moment auch nicht so klappt, wie ich das brauche (ich will Bilder, jpg, in der Tabelle ausgeben), werde ich wohl mein Writer-Doc als OOo-Base-Bericht umfummeln müssen ;-(

Viele Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
seve1980
*
Beiträge: 10
Registriert: Fr, 09.04.2010 12:45

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von seve1980 »

Jo das klappt so weit nun werde ich mal schaun wie ich das im Report mache.
Wie macht man das mit den Tabellen im Writer? Kann man das als Report ersatz machen so das die automatisch aktualisiert werden? Weil dann könnte ich theoretisch mit verschiedenen kleineren Abfragen arbeiten denn ich brauche eh nur einen Patienten auf ein mal.

Vielen Dank dir für deine ausführliche Hilfe :) :)

Gruß
Seve
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von AndreasJBittner »

Hallo Seve,

ja klar geht das mit Writer. Du könntest Deine Patientenberichte als Serienbrief entwerfen, deren Daten aus der DB gezogen werden. Dabei braucht es noch nicht einmal Tabellen, die Datenfelder können mitten im Text stehen. Lies mal in der Hilfe etwas über Serienbriefe, ich geh derweil ne Runde mit dem Hund. :-D

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
seve1980
*
Beiträge: 10
Registriert: Fr, 09.04.2010 12:45

Re: 1:n Beziehungen in einem Bericht darstellen

Beitrag von seve1980 »

Hi Andreas,

Vielen Dank für deine Hilfe, ich werde es mit dem Serienbrief machen denke ich. Ich habe mir das gestern Abend angeschut und das wird für meine Zwecke ausreichen. Aber wieder was dazu gelernt ;-)

Gruß
Seve
Antworten