Anzeige:
Ergebnis 1 bis 11 von 11

Thema: 4 Tabellen joinen

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.12.2001
    Beiträge
    27

    4 Tabellen joinen

    Hi,

    finde im Internet nichts um folgendes Problem zu lösen:

    3 Tabellen werden zusammengefügt und eine Spalte durchsucht.
    language, item_all_language, item
    item ist der Gegenstand, language speichert Sprachen und item_all_language fügt es als n_m relation zusammen. Soweit funktioniert das auch.
    Jetzt möchte ich eine weitere Spalte aus einer anderen Tabelle zur Ausgabe hinzufügen (FK in item), hier gibts ein Bild und die bisherige Abfrage:

    home.pages.at/metalfan

    Was würdet ihr an Literatur zu (My)SQL empfehlen?

  2. #2
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von deathb
    Hi,

    finde im Internet nichts um folgendes Problem zu lösen:

    3 Tabellen werden zusammengefügt und eine Spalte durchsucht.
    language, item_all_language, item
    item ist der Gegenstand, language speichert Sprachen und item_all_language fügt es als n_m relation zusammen. Soweit funktioniert das auch.
    Jetzt möchte ich eine weitere Spalte aus einer anderen Tabelle zur Ausgabe hinzufügen (FK in item), hier gibts ein Bild und die bisherige Abfrage:

    home.pages.at/metalfan

    Was würdet ihr an Literatur zu (My)SQL empfehlen?
    Das Thema Literatur wurde hier schon öfter diskutiert.

    Dein Join Problem: Übe doch mal ein wenig den Umgang mit Joins.
    Du wirst doch genügend Beispiele im Netz finden. Wenn du die
    Philosophie eines Joins verstanden hast, ist die Anzahl der Tabellen
    unwichtig. Wenn Du irgendwann einen Join über 5 Tabellen
    brauchst fragst du wieder.!?
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.12.2001
    Beiträge
    27
    Für die Frage nach der Literatur kannst du mich haun, aber ich finde mit google einfach keine Beispiele zu meinem Problem.

  4. #4
    Registrierter Benutzer
    Registriert seit
    26.12.2002
    Ort
    Matrix
    Beiträge
    194
    Zitat Zitat von deathb
    Für die Frage nach der Literatur kannst du mich haun, aber ich finde mit google einfach keine Beispiele zu meinem Problem.
    google, joins+sql, 1. hit:
    http://www.devtrain.de/artikel_626.aspx

    zu deinem design: definiere mal NULLABLE sauber, eine m:n-tabelle mit null allowed ist etwas sinnlos, ebenso wie nullable PKs.

    -j

  5. #5
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von deathb
    Für die Frage nach der Literatur kannst du mich haun, aber ich finde mit google einfach keine Beispiele zu meinem Problem.
    Wenn Du in eine gute Buchhandlung gehst, findest du ein ganzes Regal voll.
    Jedes Buch mal kurz anlesen, und das Buch kaufen welches Du verstehst.
    Es gibt auch schon preiswerte gute Taschenbücher etc..
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.10.2005
    Ort
    MATRIX
    Beiträge
    91

    mir konnte auch nicht geholfen werden

    http://www.mrunix.de/forums/showthread.php?t=42873


    hatte ein vergleichbares problem und hab es dann so hässlich gelassen ...


    :-)
    Ich will ja die Welt verbessern, aber Gott gibt mir den Quellcode nicht. Aber die Grafik hat er geil hinbekommen!

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.12.2001
    Beiträge
    27
    @Jasper: Danke für die Info.

    Hab jetzt hier ein Buch von www.teia.de, jetzt bekomme ich schonmal beliebig viele Tabellen zusammen die eine 1:1 Beziehung haben.


    SELECT *
    FROM item
    LEFT JOIN mediatype ON item.mediatypemediatype_identity = mediatype.mediatype_identity;
    LEFT JOIN nächstetabelle ON item.fkausnächstetabelle = nächstetabelle.pk


    Mit dieser Abfrage werden alle Sprachen eines items zu einem String zusammengefügt. (n:m)
    SELECT * ,
    GROUP_CONCAT(DISTINCT language.language SEPARATOR ', ') AS Sprachen
    FROM item_all_language
    LEFT JOIN item ON itemitem_identity = item.item_identity
    LEFT JOIN language ON languagelanguage_identity = language.language_identity
    GROUP BY item.titel;

    Das selbe Spiel für die surnamen der Autoren....(n:m)
    SELECT * ,
    GROUP_CONCAT(DISTINCT author.surname SEPARATOR ', ') AS Sprachen
    FROM item_all_author
    LEFT JOIN item ON itemitem_identity = item.item_identity
    LEFT JOIN author ON authorauthor_identity = author.author_identity
    GROUP BY item.titel;

    Aber wie kann man diese beiden Abfragen kombinieren so das alle Autoren sowie alle Sprachen eines items angezeigt werden?

  8. #8
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von deathb
    Aber wie kann man diese beiden Abfragen kombinieren so das alle Autoren sowie alle Sprachen eines items angezeigt werden?
    Das ist nicht so spaßig so etwas aus dem Kopf zu schreiben.
    Warum hängst du nicht ein kleines SQL Backup (als *.txt File) an dein Posting?
    Dir nimmt doch hier keiner was weg.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  9. #9
    Registrierter Benutzer
    Registriert seit
    07.12.2001
    Beiträge
    27
    Bin mir nicht sicher was du genau meinst, hab hier mal

    mysqldump --user .... --password stahl >db.sql

    angehängt.
    Enthält die Struktur und die Daten soweit ich das überblicken kann.
    Importieren kann man das mit:

    mysql> CREATE DATABASE stahl;

    und am prompt mit:
    cat db.sql |mysql --user benutzername --password stahl

    http://home.pages.at/metalfan/db.sql
    Geändert von deathb (28-04-2006 um 13:27 Uhr)

  10. #10
    Registrierter Benutzer
    Registriert seit
    07.12.2001
    Beiträge
    27
    SELECT * FROM item
    LEFT JOIN item_all_author ON item.item_identity =
    item_all_author.itemitem_identity
    LEFT JOIN author ON item_all_author.authorauthor_identity =
    author.author_identity
    LEFT JOIN item_all_language ON item.item_identity =
    item_all_language.itemitem_identity
    LEFT JOIN language ON item_all_language.languagelanguage_identity =
    language.language_identity

    In diesem Beispiel fehlt nur noch GROUP_CONCAT um für alle Sprachen/Autoren jedes Titels nur ein Ergebnis zu bekommen....aber how?

  11. #11
    Registrierter Benutzer
    Registriert seit
    07.12.2001
    Beiträge
    27
    So nah und doch so fern:

    SELECT titel,item_identity,type, GROUP_CONCAT(DISTINCT(CONCAT(author.surname, " ",author.first_name))) AS Autoren, GROUP_CONCAT(DISTINCT language) AS Languages FROM item
    LEFT JOIN item_all_author ON item.item_identity =
    item_all_author.itemitem_identity
    LEFT JOIN author ON item_all_author.authorauthor_identity =
    author.author_identity
    LEFT JOIN item_all_language ON item.item_identity =
    item_all_language.itemitem_identity
    LEFT JOIN language ON item_all_language.languagelanguage_identity =
    language.language_identity
    LEFT JOIN mediatype ON item.mediatypemediatype_identity = mediatype.mediatype_identity
    GROUP BY item.titel;


    Julius

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •