Hi, warum auch immer, verstehe ich nicht wirklich das Verhalten von
SQL wenn es darum geht Kriterien aus mehreren Tabellen in einer
Phrase zu kombinieren.
Ich möchte eine Abfrage durchführen die z. B. im Rahmen von
einem Login den entsprechenden Primärschlüssen von User (id)
zurück gibt (sofern vorhanden).
Ich habe folgenden 3 Tabellen.
Tabelle 1: "reference" mit den Spalten "id", "root_table", "root_key", "target_table", "target_key".
Tabelle 1 ist einen reine Beziehungstabelle bei der n:m-Relationen angelegt
werden können. Die "id" ist der Primärschlüssel und ist auf "auto_increment"
gestellt. "root_table" ist der Name der Tabelle, in der der Datensatz liegt
von dem aus auf einen anderen Datensatz der in einer anderen Tabelle liegt
("target_table") gezeigt wird. "root_key" und "target_key" sind die id der
jeweiligen Datensätze in der entsprechenden Tabelle die in Relation stehen.
Tabelle 2: "individual" mit den Spalten "id" und "password" [...].
Tabelle 2 Ist die Stammdatei zu jedem Nutzer in der nicht skalierbare
Daten wie z. B. das Kennwort abgespeichert ist.
Tabelle 3: "contact" mit den Spalten "id", "meta" und "value" [...].
Tabelle 3 Ist eine Tabelle in der alle möglichen Kontaktdaten (PLZ, Ort,
Email, Telefon etc.) in einem einheitlichen Raster abgebildet werden können.
"meta" enthalt ein Schlüsselwort, welches der "value"-Information
entsprechend darüber Ausdruck verleiht, ob es eine E-Mailadress, PLZ, Ort
o. Ä. ist. Ein entsprechender Datensatz könnte z. B. so aussehen: id="1";
meta="telefonnummer"; value="+49 (0) 190 - 123 456 789".
Jetzt zu meinem Anliegen: Ich möchte gerne per JOIN eine möglichst
effiziente Abfrage der Datenbank starten, in der ich die "id" der Tabelle
"individuals" zurückgegeben bekomme. Zur Verfügung stehen mir
aussreichende Datensätze in der Tabelle "reference" die jeweils in beide
Richtungen die Datensätze in den Tabellen "individuals" und "contacts" in
Relation setzen, sowie 2 Variablen über die vom Nutzer eigegebenen
Nutzerdaten "$user" und "$password".
Ich wollte fragen ob ihr mir bei der Zusammenstellung der Phrase helfen
könnt, bzw. ein wenig Feedback zum allgemeinen Aufbau der DB geben
könnt.
Hier noch mein "Mess" wie ich mir das Ganze ausgesponnen habe:
SQL wenn es darum geht Kriterien aus mehreren Tabellen in einer
Phrase zu kombinieren.
Ich möchte eine Abfrage durchführen die z. B. im Rahmen von
einem Login den entsprechenden Primärschlüssen von User (id)
zurück gibt (sofern vorhanden).
Ich habe folgenden 3 Tabellen.
Tabelle 1: "reference" mit den Spalten "id", "root_table", "root_key", "target_table", "target_key".
Tabelle 1 ist einen reine Beziehungstabelle bei der n:m-Relationen angelegt
werden können. Die "id" ist der Primärschlüssel und ist auf "auto_increment"
gestellt. "root_table" ist der Name der Tabelle, in der der Datensatz liegt
von dem aus auf einen anderen Datensatz der in einer anderen Tabelle liegt
("target_table") gezeigt wird. "root_key" und "target_key" sind die id der
jeweiligen Datensätze in der entsprechenden Tabelle die in Relation stehen.
Tabelle 2: "individual" mit den Spalten "id" und "password" [...].
Tabelle 2 Ist die Stammdatei zu jedem Nutzer in der nicht skalierbare
Daten wie z. B. das Kennwort abgespeichert ist.
Tabelle 3: "contact" mit den Spalten "id", "meta" und "value" [...].
Tabelle 3 Ist eine Tabelle in der alle möglichen Kontaktdaten (PLZ, Ort,
Email, Telefon etc.) in einem einheitlichen Raster abgebildet werden können.
"meta" enthalt ein Schlüsselwort, welches der "value"-Information
entsprechend darüber Ausdruck verleiht, ob es eine E-Mailadress, PLZ, Ort
o. Ä. ist. Ein entsprechender Datensatz könnte z. B. so aussehen: id="1";
meta="telefonnummer"; value="+49 (0) 190 - 123 456 789".
Jetzt zu meinem Anliegen: Ich möchte gerne per JOIN eine möglichst
effiziente Abfrage der Datenbank starten, in der ich die "id" der Tabelle
"individuals" zurückgegeben bekomme. Zur Verfügung stehen mir
aussreichende Datensätze in der Tabelle "reference" die jeweils in beide
Richtungen die Datensätze in den Tabellen "individuals" und "contacts" in
Relation setzen, sowie 2 Variablen über die vom Nutzer eigegebenen
Nutzerdaten "$user" und "$password".
Ich wollte fragen ob ihr mir bei der Zusammenstellung der Phrase helfen
könnt, bzw. ein wenig Feedback zum allgemeinen Aufbau der DB geben
könnt.
Hier noch mein "Mess" wie ich mir das Ganze ausgesponnen habe:
PHP-Code:
$phrase = "
SELECT individual.id
FORM individual
RIGHT JOIN reference ON contact
RIGHT JOIN individual ON reference
WHERE contact.meta='email'
AND contact.value='".$user."'
AND contact.id= reference.target_value
AND individual.password='".$password."'
AND individual.id= reference.root_value
AND reference.root_table='contact'
AND reference.target_table='individual'";
Kommentar