Ankündigung

Einklappen
Keine Ankündigung bisher.

JOIN-Abfrage erschließt sich mir nicht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JOIN-Abfrage erschließt sich mir nicht

    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:
    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'"


  • #2
    Hast du die Abfrage mal getestet? Ist oft der einfachste Weg um die gewünschte Ausgabe zu bekommen.
    Look at This!
    Digital-Duty.DE
    Für Syntax-Fehler übernehme ich keine Haftung!

    Kommentar


    • #3
      Zitat von mumaha Beitrag anzeigen
      Ich habe folgenden 3 Tabellen.

      Tabelle 1: "reference" mit den
      Spalten "id", "root_table", "root_key", "target_table", "target_key".

      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'";
      Die Spaltennamen der Tabelle reference sind mir nicht klar. Eine reference.target_value finde ich nicht.
      Am Besten Du zeigst mal die Original CREATE TABLE der drei Tabellen.

      Grüße
      Thomas

      Kommentar

      Lädt...
      X