MYSQL Datenbank eineindeutig indizieren
-
Hi,
ich bin grad am grübeln wie ich 2 Mysql tabellen sinnvoll verschalte(joine) damit ich eineindeutige aussagen im php auslesen kann.
Das alles müßte eigentlich über Primär- und fremdschlüssel gehen aber so richtig will es nicht.TabelleA
-LID
-Titel
-OrtTabelleB
-LID
-Datum1
-Datum2
-terminIDJetzt soll mir per SQLabfrage eine kombination aus beiden tabellen angegeben werden.
das blöde ist jetzt nur TabelleA.LID ist eineindeutig, dh. es gibt keine dublikate. TabelleB.LID beinhaltet die selben werte wie TabelleA.LID aber hat dublikate.
Ein Join sieht dann so aus:
SELECT TabelleA.LID, Titel, Ort, terminID, Datum1, Datum2
FROM TabelleA JOIN TabelleB
ON ( TabelleA.LID = TabelleB.LID )
ORDER BY TabelleA.LID;Ansicht ist das soweit korrekt aber wenn ich via PHP einen bestimmten daten satz bearbeiten will muß der ja eineindeutig identifizierbar sein und da ist das problem.
Ich weiß jetzt nicht ob man das irgendwie direkt in der datenbank machen kann oder sollte, bzw. nur temporär über das PHP. Dazu reichen meine kenntnisse auch nicht.
viell. hat da ja wer eine idee zu:)
mfg
-
Wie wärs mit ner Positions ID in Tabelle B welche du auch gleich in den PK hinzunimmst?
-
hm, wie würde man sowas anlegen?
-
TabelleA
-LID
-Titel
-Ort
PK(LID)TabelleB
-LID
-Pos // Die Positions-ID, kann ein auto_increment sein
-Datum1
-Datum2
-terminID
PK(LID,Pos)Dann sieht dein Select etwa so aus:
SELECT TabelleA.LID, Pos, Titel, Ort, terminID, Datum1, Datum2
FROM TabelleA JOIN TabelleB
ON ( TabelleA.LID = TabelleB.LID )
ORDER BY TabelleA.LID, Pos;Nun ist Tabelle B auch eineindeutig und du solltest keine Probleme haben das mit PHP zu bearbeiten.
-
alaso ich hab das so abgeändert. und scheinbar funktioniert das so. aber wie lösch ich jetzt eine bestimmte zeile aus diesem tabellen verbund? SQL gibt mir immer einen fehler aus das der join fehlerhaft wäre.
DELETE
FROM TabelleA JOIN TabelleB
ON ( TabelleA.LID = TabelleB.LID )
WHERE (LID = 'ABC') AND (terminID = '06-2'))
ORDER BY TabellaA.LID,POS;
-
Das liegt einfach daran, dass du in nem Delete (zumindest sagt das der ANSI Standard) keine gejointen Tabellen deleten kannst.
Du musst unterscheiden. Willst du einen Positionsdatensatz aus Tabelle B löschen, dann führst du das DELETE auch nur auf B aus.
Willst du alle Positionen und auch die Daten aus A löschen, dann führst du zwei DELETEs aus (Einer auf A und einer auf B).Alternativ könntest du durch setzen von foreign keys und den dazugehörigen constraints, das löschen der Datensätze (der jeweils anderen Tabelle) automatisch von der Datenbank durchführen lassen.
Ist aber nur eingeschränkt zu empfehlen sofern du unterschiedliche Datenbanksysteme unterstützen willst.