Lupuz.de: Artikel-Portal / Magazin

Zurück   Postpla.net - die Forum Community > PC, Internet und Technik > Coder's Area

Frage zu MySQL, Tabelle verknüpfen, JOINs

Anzeigen:

Antwort
 
Themen-Optionen
Psychopath
Alt 14.06.2008, 14:31   #1
Standard Frage zu MySQL, Tabelle verknüpfen, JOINs

Guten Tag

Ich benötige ganz dringend HIlfe beim erstellen einer Tabellenverknüpfung.
Leider habe ich so gut wie keine Ahnung und bei den üblichen Tutorials zum Thema JOINs blicke ich nicht so richtig durch.

Ich würde mich daher SEHR freuen wenn mir ein MySQL-Crack aus dem Forum den benötigten Query liefern könnte

Das ganze ist auch ziemlich wichtig und ich komme wirklich nicht weiter.

Also folgendes:
Ich möchte gerne Fotos die in der Tabelle "bilder" jeweils mit einer Startnummer verknüpfen.
Die Tabelle "bilder" hat folgende Struktur:

Code:
id    int(6)    auto_increment     
gallery_id    varchar(10)     
title    varchar(200)     
description varchar(100)
Nun habe ich mir überlegt eine neue Tabelle "event_startnummer" und "event_kategorie" zu erzeugen, da ich die Bilder gerne nach Events getrennt ausgeben möchte.

Die Tabelle "event_startnummer" soll so aussehen

Code:
id      int(11)    auto_increment 
startnummer   int(5)      
photo_id     int(6)
Struktur von "event_kategorie" .. nichts besonderes, will es aber der Vollständigkeit halber auflisten

Code:
id         int(11)   auto_increment 
name    varchar(15)

Wie bekomme ich es nun hin, dass alle Bilder (Tabelle bilder) angezeigt werden, die die Startnummer xy (Tabelle event_tartnummer) haben und einer bestimmten Kategorie (Tabelle event_kategorie) zugeordnet sind?


Habe es bereits mit
Code:
SELECT id, 
                  gallery_id, 
                  title, 
                  description, 
                  event_startnummer.startnummer  
                  FROM bilder WHERE event_startnummer.startnummer = 50 AND event_kategorien.id = 1
versucht, doch da fehlt offenbar die richtige JOIN-Bedingung.

Würde mich sehr über eure Hilfe freuen!!
 
 
Nach oben
OrionX
Alt 14.06.2008, 14:50   #2
Standard

du willst nur joinen oder?

Code:
SELECT id, 
                  gallery_id, 
                  title, 
                  description, 
                  event_startnummer.startnummer  
FROM bilder INNER JOIN event_startnummer ON bilder.id = event_startnummer.photo_id

WHERE event_startnummer.startnummer = 50 AND event_kategorien.id = 1
das sollte es jetzt so tun, aber mit deiner struktur wirst du früher oder später auf die nase fallen. so kann jeder event nur ein bild haben, eigentlich müsste es so sein, das ein mehrere events mehrere bilder haben könnten.

Fachsprachlich nennt man das was du hast eine 1:n beziehung, ein event kann nur ein bild haben, aber ein bild kann mehreren events zugeteilt sein. was du brauchst ist eine n:m beziehung.
 
 
Nach oben
Psychopath
Alt 14.06.2008, 20:07   #3
Standard

Besten Dank!
Hat super funktioniert :-)
 
 
Nach oben
OrionX
Alt 14.06.2008, 20:31   #4
Standard

naja verstehen solltest du das eigentlich auch *g*
 
 
Nach oben
Psychopath
Alt 14.06.2008, 20:44   #5
Standard

Auch wenn du mir das jetzt nicht glaubst, aber anhand von konkreten Beispielen fällts mir oft leichter solche Sachen zu verstehen.

Du hattest noch angemerkt, dass meine Struktur nicht so optimal wäre. Ich habe das ganze nochmal überdacht und verzichte auf die Tabelle "event_kategorien". Stattdessen greife ich auf die Spalte gallery_id zu, um Events zuordnen zu können.

Nun kann ich doch mehrere Startnummer einem oder auch verschiedenen Bildern zuordnen. Habe es kurz ausprobiert und scheint auch zu funktionieren - oder gibt es da irgendwo doch einen Haken?
 
 
Nach oben
OrionX
Alt 14.06.2008, 21:04   #6
Standard

naja nach SQL lehrmeinung realisieren sich n:m beziehungen eigentlich immer mit einer hilfstabelle.

du machst also eine tabelle ohne primärschlüssel, ausschliesslich mit 2 fremdschlüsseln. nämlich die photo_id und die event_id so kannst du über diese tabelle einem foto mehrere events zuordnen, oder auch mehreren events dasselbe foto.
 
 
Nach oben
RVD
Alt 15.06.2008, 01:34   #7
Standard

jep, ich hab ja auch vor kurzem erst ne bildergallerie geschrieben, da empfielt sich wirklich eine lookuptabelle zu machen, über die das "gesteuert" wird. ist halt normal so usus, ich denke wenn man versucht das anders hin zu wurschteln wirds rüher oder später probleme geben.
 
 
Nach oben
El Sparko
Alt 15.06.2008, 13:42   #8
Standard

was die lehrmeinung betrifft sind die üblichen entity-relationship modelle, wie sie orion angesprochen hat in dem fall ausreichend, aber eigentlich zu weit abstrahiert. echte datenbankmodellierung muss ein wenig ins detail gehen und beziehungen mit objekten und assotiotionen als knoten in nem graph darstellen, somit hat man nicht n:m sondern evtl. 1:* *:1, also für jede assoziation auf beiden seiten multiplizitäten.

ich schätz aber mal wenn man das so anfängt kommt man ziemlich leicht wieder auf genau die eine hilfstabelle fürs n:m raus...
 
 
Nach oben
Ähnliche Themen, die dich vielleicht interessieren
Thema Autor Forum Antworten Letzter Beitrag
Verschwörungs Theorien . Was geschah wirklich am 11 September ? Christian Philosophie und Gedanken 82 05.06.2006 02:58
mysql fehler 10061 can`t connect mysql on localhost Calli Coder's Area 6 20.08.2004 15:29
Excel Frage Malkavianer Betriebssysteme und Software 3 19.05.2004 13:47
Antworten aus "Der Schwächste fliegt" Grandylein Fun und Rätsel-Planet 10 21.07.2002 20:21
Die Wächter - eine neue Art zu leben.... MonoMan Philosophie und Gedanken 19 30.08.2001 13:28
Anzeigen:
Antwort

Themen-Optionen



Alle Zeitangaben in WEZ +2. Es ist jetzt 09:46 Uhr.


Lupuz.de - wir können auch anders!
©1998 - 2008, Lupuz:Information-Network
Powered by vBulletin Version 3.7.1 (Deutsch), Jelsoft Enterprises Ltd.
Grüne Links?

SEO by vBSEO 3.1.0 ©2007, Crawlability, Inc.