Tabelle "Humans" soll Anzahl gespeicherter Lebensereignisse anzeigen

Streethawk

Neuer Benutzer
Beiträge
3
Hallo Nutzer!

Gehen wir von folgendem Szenario aus: Es existieren 2 Tabellen.
1. Tabelle "Humans" (speichert Menschen und ihre Stammdaten und Notizen zu ihnen)
2. Tabelle "Event" (speichert Lebensereignisse wie Geburt, Kommunion, Heirat, Unfall, Krieg, Tod)

Es besteht eine 1:n-Beziehung, das heißt: Ein Mensch hat viele Ereignisse, aber 1 Ereignis ist immer genau 1 Mensch zugeordnet. Dies geschieht, indem der PRIMARY KEY der Tabelle "Humans" der FOREIGN KEY der Tabelle "Event" ist.

Ziel nun: Die Tabelle "Humans" soll im Feld "Ereignisse vorhanden Anzahl" die Anzahl der zu diesem Mensch gespeicherten Ereignisse anzeigen.

Welcher MySQL-Befehl realisiert das?? Ich kann doch keine 'Abfrage in der Abfrage' machen? Wie generiere ich die Anzahl der Ereignisse pro Mensch und wie gelangen diese Daten in die "Humans"-Tabelle?

Heiße Tipps?

Grüße von Streethawk
 
Werbung:
Hallo Nutzer!

Gehen wir von folgendem Szenario aus: Es existieren 2 Tabellen.
1. Tabelle "Humans" (speichert Menschen und ihre Stammdaten und Notizen zu ihnen)
2. Tabelle "Event" (speichert Lebensereignisse wie Geburt, Kommunion, Heirat, Unfall, Krieg, Tod)

Es besteht eine 1:n-Beziehung, das heißt: Ein Mensch hat viele Ereignisse, aber 1 Ereignis ist immer genau 1 Mensch zugeordnet. Dies geschieht, indem der PRIMARY KEY der Tabelle "Humans" der FOREIGN KEY der Tabelle "Event" ist.

Ziel nun: Die Tabelle "Humans" soll im Feld "Ereignisse vorhanden Anzahl" die Anzahl der zu diesem Mensch gespeicherten Ereignisse anzeigen.

Das ist so erst einmal schlecht. Du kannst einen normalen Join machen und das setzen, aber beim nächsten Insert / delete in events stimmt der Wert nicht mehr. Ich würde dies NICHT machen. Falls Du darauf bestehst: mit TRIGGER arbeiten.
 
Das ist so erst einmal schlecht. Du kannst einen normalen Join machen und das setzen, aber beim nächsten Insert / delete in events stimmt der Wert nicht mehr. Ich würde dies NICHT machen. Falls Du darauf bestehst: mit TRIGGER arbeiten.

Code:
test=# select * from master;
 id | anzahl
----+--------
  1 |
  2 |
(2 rows)

test=*# select * from slave;
 m_id |  val
------+-------
  1 | foo1
  2 | foo2
  2 | foo22
(3 rows)

test=*# update master set anzahl = foo.count from (select master.id, count(slave.*) from master left join slave on master.id=slave.m_id group by master.id) foo where master.id=foo.id;
UPDATE 2
test=*# select * from master;
 id | anzahl
----+--------
  1 |  1
  2 |  2
(2 rows)
 
Hallo Akretschmer,

ich bestehe nicht darauf. Wie kann man die DB besser designen?

Grüße von Streethawk

Vielleicht via View?

Code:
test=*# create view view_master as select m.id, count(s.*) from master m left join slave s on m.id=s.m_id group by m.id;
CREATE VIEW
test=*# select * from view_master ;
 id | count
----+-------
  1 |  1
  2 |  2
(2 rows)
 
Hallo Akretschmer,

so habe ich es jetzt erst einmal gelöst:

UPDATE Humans SET ERGVORANZ = (SELECT count(EvFK) FROM Event WHERE Event.EvFK = Humans.Nummer)

Grüße von Streethawk
 
Werbung:
Hallo Akretschmer,

so habe ich es jetzt erst einmal gelöst:

UPDATE Humans SET ERGVORANZ = (SELECT count(EvFK) FROM Event WHERE Event.EvFK = Humans.Nummer)

Grüße von Streethawk
So hast du aber genau das Problem was akretschmer angesprochen hat. Verändert sich die Anzahl der Einträge verändert sich nicht automatisch dein Wert. Eine View wäre hier der richtige Weg.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben