Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 5%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 392 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

jazzdee

Lebende Foren Legende

Dabei seit: 12.11.2002

Beiträge: 1 886

 

1 Zum Seitenanfang

Freitag, 9. Juli 2004, 14:39

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:

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
 

Alfons_G

Routinier

Dabei seit: 26.04.2003

Beiträge: 486

 

2 Zum Seitenanfang

Freitag, 9. Juli 2004, 15:49

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
 

jazzdee

Lebende Foren Legende

Dabei seit: 12.11.2002

Beiträge: 1 886

 

3 Zum Seitenanfang

Freitag, 9. Juli 2004, 17:03

wenn du zeit hast, kannste dich dann vielleicht nochmal mit dem thema befassen?
ich bin am verzweifeln :( ..... :( ;(

greetz
jazzdee
 

MSch

Routinier

Dabei seit: 23.09.2002

Beiträge: 288

 

4 Zum Seitenanfang

Freitag, 9. Juli 2004, 17:24

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
 

jazzdee

Lebende Foren Legende

Dabei seit: 12.11.2002

Beiträge: 1 886

 

5 Zum Seitenanfang

Freitag, 9. Juli 2004, 18:40

öhmmm...klappt irgendwie nicht

habs jetzt mit 3 verschiedenen abfragen gemacht. sieht zwar codemäßig ziemlich scheiße aus, klappt aber wunderbar :)

mfg
jazzdee
 

Sebian

Haudegen

Dabei seit: 14.05.2003

Beiträge: 645

 

6 Zum Seitenanfang

Sonntag, 20. Februar 2005, 22:38

Ich denke du musst gar nicht 4 Tabellen haben, 3 genügen, da du alles Id's zu alben oder interpreten beim lied speichern kannst.
 

Dabei seit: 08.12.2002

Beiträge: 1 220

 

7 Zum Seitenanfang

Dienstag, 22. Februar 2005, 08:49

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
 

Shurakai

Foren Gott

Dabei seit: 05.02.2003

Beiträge: 2 181

 

8 Zum Seitenanfang

Samstag, 5. März 2005, 23:54

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.
 

Dabei seit: 08.12.2002

Beiträge: 1 220

 

9 Zum Seitenanfang

Montag, 7. März 2005, 13:45

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 :P
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 :P

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 :D
 

Shurakai

Foren Gott

Dabei seit: 05.02.2003

Beiträge: 2 181

 

10 Zum Seitenanfang

Dienstag, 8. März 2005, 22:40

HeHeHe... nein habe nicht den CrossJoin mit einem FullJoin verwechselt... weil das nämlich beides das Gleiche ist :D -> 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 ;)
 

Dabei seit: 08.12.2002

Beiträge: 1 220

 

11 Zum Seitenanfang

Dienstag, 8. März 2005, 22:45

Zitat

Original von Shurakai
HeHeHe... nein habe nicht den CrossJoin mit einem FullJoin verwechselt... weil das nämlich beides das Gleiche ist :D -> 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)