• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Tabellen verbinden sql JOIN

No3x

Mitglied
Hallo, ich hab ein Problem hinter das Verbinden von Tabellen zu kommen.
Habe diesen Synatx vor Augen:
HTML:
SELECT
`t_1`.*
FROM
`table_1` AS `t_1`
INNER JOIN
`table_2` AS `t_2`
ON
(`t_1`.`id` = `t_2`.`id_table_1`)
WHERE
`t_2`.`spalte_3` = 'xyz'
Komme aber nicht wirklich hinter die Logik. Kann mir das jemand erklären?
 
Werbung:
So, ich versuche mal, das ganze aufzudröseln:
INNER JOIN - Verknüpft werden die Tabellen table_1 (umbenannt in t_1) und table_2 (umbenannt in t_2).
ON - Verknüft werden die Tabellen über id in t_1 und id_table_1 in t_2.
SELECT - Ausgewählt werden alle Felder aus t_1
WHERE - wenn in Tabelle "t_2" in Feld "spalte_3" der Wert 'xyz' enthalten ist.

Das ganze hätte man auch, meiner Meinung nach, vereinfacht schreiben können.
Code:
SELECT 
  `table_1.*`
FROM
  `table_1`, `table_2`
WHERE
   `table_1.id` = `table_2.id_table_1` AND `table_2.spalte_3` = 'xyz';
Ich hoffe, dass ich mich halbwegs verständlich ausgedrückt habe.

Gruß thuemmy
 
Danke, ist mir etwas klarer geworden was der code macht.
Mir wurde empfohlen:
Ich empfehle dir in deine tabellenstruktur immer "id", "changed", "created", "active" einzubauen! das hat mehrere vorteile. id zur eindeutigen identifizierung (sollte sowieso IMMER dabei sein, natürlich als primärschlüssel und auto increment) changed und created als timestamp anlegen (changed wird automatisch auf das letzte aktuallisierte datum gesetzt) und active mit tinyint und standart 1. und wenn du etwas löschen willst, löschst du es nicht, sondern setzt 'active' = 0. und beim select wenn du etwas ausliest immer mit active = 1 suchen.

Angenommen ich habe 2 Tabellen mit "id", "changed", "created", "active" und führe sie zusammen, dann habe ich doch jede Spalte 2x in einer neuen "logischen" Tabelle. Da versteh ich nicht wie ich mit den Spalten umgehen soll.
Wie müsste der Syntax aussehen, wenn sich z.B. ein User registriert, es wird in der Tabelle `user` id über auto increment ausgefüllt. Wie wird auch in der Tabelle `optionen` die selbe id eingefügt? Oder ist dies keine Aufgabe von JOIN?
 
Werbung:
Also, ich habe auch in jeder Tabelle ein id-Feld (auto-increment und als Primärschlüssel). Ob Du noch created, changed und active in der Tabelle hast, kommt meiner Meinung nach ganz auf den Inhalt der Tabelle an.

Da ich bei meinem Tabellen, wie schon zuvor geschrieben, immer ein Präfix aus 2 Buchstaben dem Feldnamen vorranstelle, gibt es keine Probleme mit doppelten Feldnamen.

Nochmal das Beispiel von oben, mit den Tabellen user und optionen:
Code:
user
  usid (auto-increment)
  usname (text)
  uspasswort (text, MD5-verschlüsselt)
  uscreated (timestamp)
  uschanged (timestamp)
  usactive (boolean)

option
  opid (auto-increment)
  opusid (int - dies ist die Verknüpfung mit der Tabelle user - enthält die usid des user)
  opblabla 
  opcreated
  opchanged
  opactive
Du machst zuerst das INSERT auf die user-Tabelle. Wenn das erfolgreich ist, mit mysql_insert_id den Wert aus usid herrausfinden, und diesen beim INSERT für die option-Tabelle (Feld opusid) verwenden.

Gruß thuemmy
 
Danke dir, ist nun etwas verständlicher, aber werde noch ein bisschen mehr mit machen müssen, damit ich es beherrsche.
 
Zurück
Oben