WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Datenbanken Anstosshilfe (http://www.wcm.at/forum/showthread.php?t=144551)

3of4 12.09.2004 18:27

Datenbanken Anstosshilfe
 
ich habe eine tabelle mit fahrzeugen (jedes fahrzeug kommt nur einmal vor) und eine tabelle mit ausrüstungsgegenständen (jeder gegenstand kommt nur einmal vor)
wenn ich jetzt zwischen den beiden tabellen eine verknüpfung herstellen will (jedes fahrzeug hat eine variable anzahl von ausrüstungsgegenständen, aber eine ausrüstung kann auch in mehreren fahrzeugen vorhanden sein...) brauch ich dafür unbedingt eine dritte tabelle dazwischen oder gibt es eine andere elegante (!!!) lösung? (mir fällt nur die extratabelle ein, allerdings scheu ich davor noch ein bisserl zurück...)

außerdem bräuchte ich noch die passenden sql-abfragen für diese tabellen, irgendwie funzt bei mir überhaupt nix (*dentagvormschleppiverschissenhab*)

mtrax 12.09.2004 18:35

ich hoffe ich habe das richtig verstanden...

nein brauchst du nicht unbedingt, reicht nur eine zusätzliche Spalte, mit den Gegenständen (als Zahl oder so)...

tblCar:
Auto - Gegenstände
Audi - 1,5,6,7
VW - 2,5,6
Opel - 1,5,6

tblequipment:
1 - Reifen
5 - Lenkrad
6 - Lichtmaschine

etc...

MySQL ? oder MS Access ?

3of4 12.09.2004 18:49

Wenn ich eine extra Spalte mache, müsste ich die Werte als String reinspeichern, ganz abgesehen davon, dass keine Aktualisierungsweitergabe stattfindet...

Das ganze ist für ein CMS (konkret die Verwaltung der Feuerwehrfahrzeuge und dazu halt ein auszugsweiser Plan welche Ausrüstung in welchem Fahrzeug ist...)

mtrax 12.09.2004 19:09

Hmmm wo ist dann das Problem ?

Irgendwann muss du einmal einem Fahrzeug einen Gegenstand zuordnen...
Ob das in einer extra Tabelle oder extra Spalte geschieht...ist ansicht sache...

3of4 12.09.2004 19:12

Zitat:

Original geschrieben von mtrax
Hmmm wo ist dann das Problem ?

Irgendwann muss du einmal einem Fahrzeug einen Gegenstand zuordnen...
Ob das in einer extra Tabelle oder extra Spalte geschieht...ist ansicht sache...

ich will einem fahrzeug viele gegenstände bzw. einem gegenstand viele fahrzeuge zuordnen...
und genau diese 1:n beziehungen krieg ich anders nicht hin :(

T.dot 12.09.2004 19:24

Sers!

Also wenn ich dich richtig verstanden habe musst du das ganze als m:n Beziehung (1 Auto -> mehrere Gegenstände, 1 Gegenstand -> mehrere Autos) auflösen

und das geht nur über eine Zwischentabelle. z.b.:

(Felder mit ID sind eindeutige Bezeichner, also Primärschlüssel)

Tabelle tblFahr (Fahrzeuge):
FA_ID, Fahrzeugname, ...

Tabelle tblGeg (Gegenstände):
GE_ID, Gegenstandsname, ...

Zwischentabelle tblFahrGeg (FahrzeugGegenstände):
FA-GE_ID, FA_ID, GE_ID

um jetzt anzeigen zu lassen, in welchem Fahrzeug welche Gegenstände sind:

SELECT Fahrzeugname,Gegenstandsname
FROM tblFahr, tblGeg
WHERE tblFahr.FA_ID=tblFahrGeg.FA_ID
AND tblGeg.GE_ID=tblFahrGeg.GE_ID


hoffe geholfen zu haben

mfg Thomas

Jaguar 12.09.2004 19:29

Du bekommst das nicht hin weil das keine 1:n sondern eine m:n Relation ist. Auflösen einer m:n Beziehung schaffst nur mit Hilfe einer weiteren Tabelle die zumindest die beiden Schlüsselfelder der zu verknüpfenden Tabellen hat.

frazzz 12.09.2004 19:33

Zitat:

Original geschrieben von Jaguar
Du bekommst das nicht hin weil das keine 1:n sondern eine m:n Relation ist. Auflösen einer m:n Beziehung schaffst nur mit Hilfe einer weiteren Tabelle die zumindest die beiden Schlüsselfelder der zu verknüpfenden Tabellen hat.

:ja:

hört sich gut an. :D

3of4 12.09.2004 19:42

aha, ich nannte es halt eine n:1:n beziehung :D (in meiner mir eigenen typisch unverständlichen weise)

allerdings klappt das ganze noch immer nicht so wie ich will :(

Code:

SELECT DISTINCTROW fahrzeuge.f_name, ausruestung.a_name
FROM fahrzeuge INNER JOIN (ausruestung INNER JOIN kreuztabelle ON ausruestung.a_id = kreuztabelle.aid) ON fahrzeuge.f_id = kreuztabelle.fid
GROUP BY fahrzeuge.f_name;

Fahrzeuge und Ausruestung sind die Tabellen, ausruestung.aid und fahrzeuge.fid die schlüsselwerte und kreuztabelle meine hilfstabelle...
ich will, dass neben 1. fahrzeug eine liste von allen darin enthaltenen gegenständen auftaucht, nur irgendwie frissts meinen sql-string nicht :(

frazzz 12.09.2004 19:46

die syntax welchen dbs ist das :rolleyes:

3of4 12.09.2004 19:50

Zitat:

Original geschrieben von frazzz
die syntax welchen dbs ist das :rolleyes:
im moment versuche ich den schrott über ms access zu machen, nachher muss ich dann das ganze als sql-file exportieren um es auf einen sql-server zu bringen.
wieso?

T.dot 12.09.2004 20:08

nimmst halt meine select version und schreibst sie um, die funkt bei mir...

select fahrzeuge.f_name, ausruestung.a_name
from fahrzeuge,ausruestung
where ausruestung.a_id = kreuztabelle.aid
and fahrzeuge.f_id = kreuztabelle.fid
order by fahrzeuge.f_name (oder group by oder was du gern hättest)


in access brauchst nur im abfrageneditor alle 3 tabellen reinziehen, die 2 felder die du sehen willst reinziehen und eine verknüpfung von ausruestung.a_id zu kreuztabelle.aid und von fahrzeuge.f_id zu kreuztabelle.fid zu machen.

du kannst die verbindungen auch über die beziehung eingeben... wobei ers mit meiner syntax glaub ich eh nicht braucht...

however...

3of4 12.09.2004 20:53

deine version erzeugt bei mir beim ausführen (noch in access) immer 2 eingabeaufforderungen für kreuztabelle.fid und kreuztabelle.aid

Code:

SELECT f_name, a_name
FROM fahrzeuge, ausruestung
WHERE fahrzeuge.f_id=kreuztabelle.fid And ausruestung.a_id=kreuztabelle.aid;


T.dot 12.09.2004 21:48

also bei mir gehts. wahrscheinlich hast die kreuztabelle nicht bei den tabellen für die abfrage eingebunden, dann fragt er nämlich danach...

aussehen muss wie der Anhang

mfg Thomas

3of4 12.09.2004 21:55

Danke!
 
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!
ich werde nie wieder restfett programmiern!

T.dot 12.09.2004 22:02

also ich muss mich immer beim programmieren betrinken, so nervtötend wie das in letzter zeit is ;)

:cool:

na dann viel spaß noch damit...


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag