MYSQL JOIN mit 4 tabellen ???
hallo, ich habe ein großes problem
ich habe 4 tabellen.
in der ersten tabelle stehen daten zu interpreten
in der zweiten tabelle stehen daten zu alben
in der dritten tabelle stehen daten zu songs
in der vierten tabelle werden all die anderen tabellen verknüpft. siehe struktur:
ich würde jetzt gerne mit einer abfrage alle daten auslesen. die id's sind ja alle in der vierten tabelle gespeichert. ist das möglich? kann man das einfahc so machen????
würde mich sehr sehr sehr über hilfe freuen...dieses scheiß JOIN hab ich noch nie hinbekommen
greetz
jazzdee
ich habe 4 tabellen.
in der ersten tabelle stehen daten zu interpreten
in der zweiten tabelle stehen daten zu alben
in der dritten tabelle stehen daten zu songs
in der vierten tabelle werden all die anderen tabellen verknüpft. siehe struktur:
|
|
Quellcode |
1 2 3 4 5 6 7 8 |
CREATE TABLE `lyric_wire` ( `net_id` int(11) NOT NULL auto_increment, `song_id` int(11) NOT NULL default '0', `artist_id` int(11) NOT NULL default '0', `album_id` int(11) NOT NULL default '0', `user_id` int(11) NOT NULL default '0', PRIMARY KEY (`net_id`) ) TYPE=MyISAM AUTO_INCREMENT=129 ; |
ich würde jetzt gerne mit einer abfrage alle daten auslesen. die id's sind ja alle in der vierten tabelle gespeichert. ist das möglich? kann man das einfahc so machen????
würde mich sehr sehr sehr über hilfe freuen...dieses scheiß JOIN hab ich noch nie hinbekommen

greetz
jazzdee
RE: MYSQL JOIN mit 4 tabellen ???
Im Prinzip ist ein Join einfach. Du arbeitest am besten einmal die Beispiele im PHP-Manual durch.
Um in diesem Fall alle Daten auszugeben, solltest Du allerdings vorher überlegen, was Du in welcher Reihenfolge benötigst. Denn - ein Interpret hat meistens mehrere Songs, ein Song hat manchmal mehrere Interpreten. Auf einem Album sind immer mehrere Songs, ein Song kann jedoch auch auf mehreren Alben erscheinen.
Wenn Du z.B. die Alben auflisten willst, dann musst Du zuerst nach den Alben sortieren und die anderen Daten dieser Sortierung unterordnen.
Im Augenblick habe ich leider keine Zeit, ein ausführliches Beispiel zu schreiben.
Alfons
Um in diesem Fall alle Daten auszugeben, solltest Du allerdings vorher überlegen, was Du in welcher Reihenfolge benötigst. Denn - ein Interpret hat meistens mehrere Songs, ein Song hat manchmal mehrere Interpreten. Auf einem Album sind immer mehrere Songs, ein Song kann jedoch auch auf mehreren Alben erscheinen.
Wenn Du z.B. die Alben auflisten willst, dann musst Du zuerst nach den Alben sortieren und die anderen Daten dieser Sortierung unterordnen.
Im Augenblick habe ich leider keine Zeit, ein ausführliches Beispiel zu schreiben.
Alfons
ungefähr:
|
|
Quellcode |
1 2 3 4 |
SELECT net_id, song.*, artist.*, album.*, user.* FROM lyric_wire INNER JOIN song ON (lyric_wire.song_id=song.id) INNER JOIN artist ON (lyric_wire.artist_id=artist.id) LEFT OUTER JOIN album ON (lyric_wire.album_id=album.id) INNER JOIN user ON (lyric_wire.user_id=user.id) ORDER BY net_id |
Naja ich weiß nicht ob da INNER JOINS unbedingt seien müssen.
Du kannst einfach Daten miteinander verknüpfen in dem du das so machst z.B.:
SELECT tabelle1.id1, tabelle2.id2
FROM tabelle1,tabelle2
WHERE tabelle1.id1=tabelle2.id2
AND ....;
Kannst du natürlich beliebig erweitern
Bei der ersten AND Bedingung musst du halt die Bedingung eintragen die dir die meisten fehleinträge wegschmeißt damit du ne flotte SQL Abfrage hast und dann immer so weiter
. Ich finds eleganter mit AND zu Verknüpfen als mit INNER JOINS alleine schon wegen der Übersicht.
Greetz
MaxTPayne
Du kannst einfach Daten miteinander verknüpfen in dem du das so machst z.B.:
SELECT tabelle1.id1, tabelle2.id2
FROM tabelle1,tabelle2
WHERE tabelle1.id1=tabelle2.id2
AND ....;
Kannst du natürlich beliebig erweitern
Bei der ersten AND Bedingung musst du halt die Bedingung eintragen die dir die meisten fehleinträge wegschmeißt damit du ne flotte SQL Abfrage hast und dann immer so weiter
. Ich finds eleganter mit AND zu Verknüpfen als mit INNER JOINS alleine schon wegen der Übersicht.Greetz
MaxTPayne
Ist zwar schon alt das Thema, aber ich hols nochmal hoch.
Die von MaxPayne gepostetet Lösung mithilfe eines CrossJoins ist definitiv nicht zu empfehlen.
Ein CrossJoin verknüpft "alles mit allem". D.h., bringt Tabelle a 100 Ergebnissätze zurück, Tabelle b 10 und Tabelle c 500, dann hätten wir 100 * 10 * 500 = 500.000 Ergebnisse. Toll
Benutzt LEFT JOINS.
Die von MaxPayne gepostetet Lösung mithilfe eines CrossJoins ist definitiv nicht zu empfehlen.
Ein CrossJoin verknüpft "alles mit allem". D.h., bringt Tabelle a 100 Ergebnissätze zurück, Tabelle b 10 und Tabelle c 500, dann hätten wir 100 * 10 * 500 = 500.000 Ergebnisse. Toll

Benutzt LEFT JOINS.
Zitat
Original von Shurakai
Ist zwar schon alt das Thema, aber ich hols nochmal hoch.
Die von MaxPayne gepostetet Lösung mithilfe eines CrossJoins ist definitiv nicht zu empfehlen.
Ein CrossJoin verknüpft "alles mit allem". D.h., bringt Tabelle a 100 Ergebnissätze zurück, Tabelle b 10 und Tabelle c 500, dann hätten wir 100 * 10 * 500 = 500.000 Ergebnisse. Toll
Benutzt LEFT JOINS.
Naja da sagt mir mein SQL Handbuch und mein DB Lehrer aber was anderes

Also eigentlich ist es egal wie man das verknüpt nur ein paar Sachen sollte man deswegen schon wissen.
1. Inner Join(mit where Klausel verknüpfen oder auch Cross Join
):Hier bekommst du nur Datensätze die wirklich alle Kriterien erfüllen also wenn du z.B. bei einem Datensatz einen Fremdschlüssel hast der aber in der anderen tabelle nicht vorhanden ist wird dieser auch nicht ausgegeben. Sprich im Endeffekt sogar weniger Datensätze

2. Left Join:
Hier werden Datensätze von tabelle a mit tabelle b soweit wie möglich verknüpft wenn keine Übereinstimmungen vorhanden sind werden diese trotzdem angegeben. Wenn man z.B. eine Telefonliste der Mitarbeiter hat mit allen Handynummern verknüpft ist das sinnvoll da sonst die Mitarbeiter ohne eingetragener Handynummer nicht auftauchen

Vieleicht verwechselchst du auch einfach den Inner/Cross Join mit einem Full Join

Greetz
MaxTPayne
PS: ich heiße MaxTPayne nicht MaxPayne
HeHeHe... nein habe nicht den CrossJoin mit einem FullJoin verwechselt... weil das nämlich beides das Gleiche ist
-> und die sind böse, definitiv. (Siehe Beispiel, das stimmt nämlich 100%ig)
Habe aber fälschlicherweise das da oben als CrossJoin bezeichnet, ist aber eigentlich ein EquiJoin.
LEFT JOINs sind meiner Meinung nach die Besten - kann man sehr sehr gut einsetzen.
Naja, danke für den Hinweis. Auch wenn für mich die Erklärungen der JoinTypen überflüßig waren
-> und die sind böse, definitiv. (Siehe Beispiel, das stimmt nämlich 100%ig)Habe aber fälschlicherweise das da oben als CrossJoin bezeichnet, ist aber eigentlich ein EquiJoin.
LEFT JOINs sind meiner Meinung nach die Besten - kann man sehr sehr gut einsetzen.
Naja, danke für den Hinweis. Auch wenn für mich die Erklärungen der JoinTypen überflüßig waren
Zitat
Original von Shurakai
HeHeHe... nein habe nicht den CrossJoin mit einem FullJoin verwechselt... weil das nämlich beides das Gleiche ist-> und die sind böse, definitiv. (Siehe Beispiel, das stimmt nämlich 100%ig)
Habe aber fälschlicherweise das da oben als CrossJoin bezeichnet, ist aber eigentlich ein EquiJoin.
LEFT JOINs sind meiner Meinung nach die Besten - kann man sehr sehr gut einsetzen.
Naja, danke für den Hinweis. Auch wenn für mich die Erklärungen der JoinTypen überflüßig waren![]()
Ich hab das dann auch als CrossJoin genannt weil du das so gennat hattest und das bei mir im Handbuch nicht drinn steht und dachte du hättest dich vertan
jedenfalls mach ich das mit einem EquiJoin lieber da ich dann Datensätze die einen ungültigen Fremdschlüssel haben nicht lade
Ist aber halt nicht für jede Situation passend da man das nicht immer will 
Greetz
MaxTPayne
€dit: Für dich war die Erklärung unnötig aber hoffentlich hilfst sie anderen
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »maxtpayne« (8. März 2005, 22:47)
Ähnliche Themen
-
PHP »-
Aus einer Tabelle mit 2 User-IDs den Username aus anderer Tabelle auslesen
(4. Februar 2006, 21:41)
-
Datenbanken »-
Daten aus 2 Tabellen auslesen ... JOIN ?!
(23. Dezember 2005, 20:45)
-
Datenbanken »-
x Datenbank zu 1 Datensatz zusammenfassen
(21. November 2004, 00:22)
-
PHP »-
hab ein richtiges problem
(8. August 2003, 18:13)
-
PHP »-
Farbige Tabellen mit MySQL
(20. November 2002, 21:13)



