[Frage] M:M Relation in SQL-Query abbilden TYPO3-Version: 7.6.11

  • 0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    25. 10. 2016, 20:49

    Hallo zusammen,

    der Titel sagt ja schon viel über mein Problem aus...

    Ich arbeite gerade an einer Extension, die ich mit dem Extension Builder erstellt habe.

    Meine Extension soll Mitglieder meines Vereines an Ihre Dienste per E-Mail erinnern. Deshalb habe ich verschiedene Tabellen erstellt (sind alles Root-Objekte).

    Nun bin ich etwas ratlos wie ich die SQL-Query für den Mailversand (wird über die mail Funktion über php laufen) "design" soll, da ich einfach nicht mit den M:M Relationstabelle zurecht komme.

    Tabelle Dienst:

    datum
    mitglied (m:m Relation) (int)

    Tabelle mitglied_mm (automatisch erstellt)
    uid_local --> bezieht sich auf den wert in der Spalte mitglied von Tabelle Dienst

    uid_foreign --> bezieht sich auf die Tabelle Mitglied

    Tabelle Mitglied
    uid
    name

    Benötige von der Mitgliedstabelle den Namen.

    Hat jemand Erfahrung mit dieser "Hilfstabelle"?

    Wie stelle ich des am besten an?

    (Glaube bei den automatisch generierten Tabellen fehlt noch einiges oder? unique oder FOREIGN KEYS etc.)

    Wenn weitere INfos zu den Tabellen benötigt werden , bitte melden.

    Hat jemand Erfahrung mit sowas?

    Danke!

  • Hilfreichster Beitrag

  • 1 x
    23 Beiträge
    1 Hilfreiche Beiträge
    27. 10. 2016, 16:54 - Hilfreichster Beitrag

    Du hast zwar den Join ausgeführt, aber du hast vergessen die Tabellen mit ON zu verknüpfen ;)
    Deshalb bekommst du auch unzählige Einträge geliefert (da er pro Eintrag komplett über die andere Tabelle flippert und Einträge liefert).

    Deine Query sollte ungefähr wie folgt aufgebaut sein:
    SELECT * FROM tabelle INNER JOIN mm-tabelle ON tabelle.uid = mm-tabelle.uid_local WHERE ...

    So sollte es normalerweise klappen ;)


  • 1
  • 0 x
    23 Beiträge
    1 Hilfreiche Beiträge
    26. 10. 2016, 14:23

    Bei Deiner Query musst du mit Joins arbeiten ;)
    Hierzu gibt es ja vielfältige Infos im Netz.

  • 0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    26. 10. 2016, 20:06

    Danke für deine Rückmeldung.

    Ok danke.

    Habe nun mich etwas über die Joins informiert.

    Nun komme ich an die Werte meiner benötigten Tabellen.

    Komischerweise werden mir nun "massenhaft" (doppelte) Einträge angezeigt.

    Hier meine Query:

    SELECT person.uid, person.name, event.datum, person.email, event.name
    FROM
    tx_table_event event,
    tx_table_mitglied person
    INNER JOIN
    tx_mitglied_miglied_mm
    WHERE event.datum BETWEEN DATE_ADD(CURDATE(),INTERVAL 1 DAY) AND DATE_ADD(CURDATE(),INTERVAL 2 DAY)

    Anbei die Antwort ( Ich möchte nur die Events, die am nächsten Tag stattfinden anzeigen lassen) im Bild.

    [url]https://www.dropbox.com/s/1xul1jyay9zth7c/doppelt.jpg[/url]

    Leider kann ich keine .jpg anhängen... deshalb der Link

  • 1 x
    23 Beiträge
    1 Hilfreiche Beiträge
    27. 10. 2016, 16:54

    Du hast zwar den Join ausgeführt, aber du hast vergessen die Tabellen mit ON zu verknüpfen ;)
    Deshalb bekommst du auch unzählige Einträge geliefert (da er pro Eintrag komplett über die andere Tabelle flippert und Einträge liefert).

    Deine Query sollte ungefähr wie folgt aufgebaut sein:
    SELECT * FROM tabelle INNER JOIN mm-tabelle ON tabelle.uid = mm-tabelle.uid_local WHERE ...

    So sollte es normalerweise klappen ;)

  • 0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    30. 10. 2016, 10:26

    Danke für deinen Tipp.

    Habe aber festgestellt, dass ich meine Tabellenstruktur und die dazugehörige Beziehung deutlich vereinfachen kann. Habe zwar immer noch eine m:n Beziehung (bzw. dann die M:M-Tabelle für die Mitglieder), aber mit deinem Tipp bin ich schon mal recht weitgekommen.

    EDIT:
    So habe es nun geschafft die notwendige Query zu generieren. Danke nochmal!

  • 1