Archiv verlassen und diese Seite im Standarddesign anzeigen : 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?
Romanday
25-04-2006, 19:58
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.!?
Für die Frage nach der Literatur kannst du mich haun, aber ich finde mit google einfach keine Beispiele zu meinem Problem.
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
Romanday
25-04-2006, 21:46
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..
Mehlwurm
26-04-2006, 09:54
http://www.mrunix.de/forums/showthread.php?t=42873
hatte ein vergleichbares problem und hab es dann so hässlich gelassen ...
:-)
@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?
Romanday
28-04-2006, 03:35
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.
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
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?
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.