rainer: Datenbank JOIN

Hallo,

komme mit meinen JOIN nicht klar.

SELECT zf_id_ga,
       timestamp_ga,
       datum,
       user_ga,
       arbeitsbeginn_ga,
       arbeitsende_ga,
       kontrGL,
       kontr,
       loginoon.kennung,
       loginoon.gebiet
FROM gazeiterfassung
LEFT JOIN loginoon
ON loginoon.kennung=gazeiterfassung.user_ga
WHERE loginoon.kennung='".$_SESSION["MM_Username"]."'";

So bekomme ich vom eingeloggten User die Daten.

Ich möchte mich über eine Session einloggen, Tabellen sollten jedoch über das Gebiet=eine Nummer (fast mehrere User zusammen) angezeigt werden, nicht über den Usernamen.

Hab schon alles probiert, kann irgendwie das Gebiet nicht ansprechen.

mfg

Rainer

  1. Hallo,

    komme mit meinen JOIN nicht klar.
    Ich möchte mich über eine Session einloggen, Tabellen sollten jedoch über das Gebiet=eine Nummer (fast mehrere User zusammen) angezeigt werden, nicht über den Usernamen.

    Ich kann mir beim besten Willen nicht vorstellen, was du da treibst oder vorhast. Vielleicht mal mit ein paar Beispieldaten unterlegen.

    Also wenn die Entitäten "User" und "Gebiet" eine Vernküpfung haben, wie sieht diese aus und wo ist sie definiert?

    Hab schon alles probiert, kann irgendwie das Gebiet nicht ansprechen.

    "Alles" ist relativ. Ausserdem, woher sollen die Leser hier wissen, was du bereits probiert hast? "Gebiet" ansprechen wo, wobei, womit?

    Ciao, Frank

    1. Hallo,

      komme mit meinen JOIN nicht klar.
      Ich möchte mich über eine Session einloggen, Tabellen sollten jedoch über das Gebiet=eine Nummer (fast mehrere User zusammen) angezeigt werden, nicht über den Usernamen.

      Ich kann mir beim besten Willen nicht vorstellen, was du da treibst oder vorhast. Vielleicht mal mit ein paar Beispieldaten unterlegen.

      »»

      Also wenn die Entitäten "User" und "Gebiet" eine Vernküpfung haben, wie sieht diese aus und wo ist sie definiert?

      Hab schon alles probiert, kann irgendwie das Gebiet nicht ansprechen.

      "Alles" ist relativ. Ausserdem, woher sollen die Leser hier wissen, was du bereits probiert hast? "Gebiet" ansprechen wo, wobei, womit?

      Ciao, Frank

      Hallo Frank,

      Danke erstmal für deine Antwort,

      Naja, ich habe zwei Tabellen

      Eine "loginoon" Tabelle mit folgender Struktur:
      ID,
      kennung,
      passwort,
      rechte,
      vorname,
      nachname,
      gebiet

      Zweite Tabelle "gazeiterfassung" mit folgender Struktur:
      ID,
      timestamp,
      datum,
      user,
      arbeitsbeginn,
      arbeitsende,
      anmerkung,
      kontrGL,
      kontr

      jetzt möchte ich mich als USER über die "gebiet" (NR) einloggen.

      "gebiet" fast mehrere "user" oder in meinen Fall "kennung" zusammen.

      Wenn ich mich als "user" der in der Tabelle "gazeiterfassung" vorkommt Einlogge(über SESSION), ist das kein Problem, dann sehe ich alles von diesen "user" in der Tabelle, ich möchte jedoch alle "user" sehen, die unter "gebiet" eine NR (zB. alle user mit der Nr. 12) haben.

      Ich hoffe, ich habe mich jetzt klarer ausgedrückt.

      mfg

      Rainer

      1. Hallo,

        grunzipiell (1): man loggt sich nicht in Tabellen ein.
        grunzipiell (2): dein bisheriger Join ist sowieso falsch herum

        Du möchtest eine Abfrage machen,

        • welche dir Informationen aus "gazeiterfassung" (User Infromationen) anzeigt
        • und wo das Suchkriterium (WHERE) nicht die User-Kennung ist, sondern "gebiet"

        Also, woher nimmst du dann den Wert für "gebiet", steht der auch in einer Session-Variablen drin? Oder möchtest du alle User passend zum Gebiet passend zur Userkennung aus der Sessionvariablen?

        Und wo ist die Verbindung zwischen der Entität "user" aus "gazeiterfassung" und der Information "gebiet"? Sind dass gazeiterfassung.user und loginoon.kennung?

        Du siehst, deine Problembeschreibung hinterlässt immer noch mehr Fragen als Antworten. ;-)

        Bis zum nächsten Mal.
        Frank

        1. Hallo,

          grunzipiell (1): man loggt sich nicht in Tabellen ein.
          grunzipiell (2): dein bisheriger Join ist sowieso falsch herum

          Du möchtest eine Abfrage machen,

          • welche dir Informationen aus "gazeiterfassung" (User Infromationen) anzeigt
          • und wo das Suchkriterium (WHERE) nicht die User-Kennung ist, sondern "gebiet"

          Also, woher nimmst du dann den Wert für "gebiet", steht der auch in einer Session-Variablen drin? Oder möchtest du alle User passend zum Gebiet passend zur Userkennung aus der Sessionvariablen?

          Und wo ist die Verbindung zwischen der Entität "user" aus "gazeiterfassung" und der Information "gebiet"? Sind dass gazeiterfassung.user und loginoon.kennung?

          Du siehst, deine Problembeschreibung hinterlässt immer noch mehr Fragen als Antworten. ;-)

          Bis zum nächsten Mal.
          Frank

          Hallo Frank,

          ich versuche einfach, mein Problem zu lösen,

          Einloggen in Tabellen, warum nicht, ich möchte sie Kontrollieren und bei falscher Eingabe korrigieren.

          Meine Voraussetzung ist:  User  (Anlegen eines Datensatzes)
                                    Kontrolle  (Kontrolle eines Datensatzes, jedoch nur vom Gebiet)
                                    Chef  (Kann alles kontrollieren)

          Erklärt: Kontrolle vom Gebiet, sollte nur die Gebiete sehen, welche mit seinen Usernamen übereinstimmen. (z.B gebiet6 sieht Daten von ga6, ga6_2, ga6_3, jedoch nicht daten von ga5, ga5_2, deshalb die Nr. für "gebiet")

          Chef kann alles sehen, deshalb auch kein Problem mit einer Session.

          Der Wert für Gebiet ist in meinen Login vergeben:

          Login: gebiet6 Rechte user  Wert für gebiet=517
                 ga6     Rechte ga    Wert für gebiet=517
                 ga6_2   Rechte ga    Wert für gebiet=517
                 ga5     Rechte ga    Wert für gebiet=28
           Chef  verw    Rechte verw  sieht alle gebiete

          Auswahl für Gebiet, sollte aber der Login sein, also nicht wählbar.

          Das ist eben mein Problem, mit Session eingeschränkten Zugriff zu vergeben.

          "loginoon" sind meine Zugagsdaten, sowie Rechte in der Datenbank
          "gazeiterfassung" ist meine Datenbank

          Danke nochmals, für deine Antwort!

          Bin momentan im Umzug, deshalb meine verzögerten Antworten. Hab durch Möbelabbau und Aufbau ein bischen Stress. (Internet nur mit Datenstick)

          mfg

          Rainer

          1. Hallo wiedermal,

            ja, okay ... was dir fehlt ist eine existente Datenbeziehung (z.b. ein Foreign Key / Fremdschlüsselbeziehung) zwischen dem Eintrag in gazeiterfassung und deiner loginoon Tabelle. Ohne den wirst du nie einen Zusammenhang zwisch beiden Tabellen herstellen können. Also welches Feld in gazeiterfassung steht für "Gebiet"? Ich sehe dieses nicht, bzw es ist nicht offensichtlich. Wenn es da ist, dann setze doch einfach selbiges in den Join ein.

            Ansonsten bringe ich hier gern auch wieder den Punkt: Dein Datenmodell ist nicht zweckgemäss.

            Bin momentan im Umzug, deshalb meine verzögerten Antworten. Hab durch Möbelabbau und Aufbau ein bischen Stress. (Internet nur mit Datenstick)

            Solange du dabei bleibst (und nicht auch noch Doppelpostings machst - das mögen die Moderatoren hier nicht so), bin ich auch da. Ich hab leider auch nebenbei noch Arbeit ... ;-)

            Ciao, Frank

  2. moin,

    wie frank schon sagte, schwierig nachzuvollziehen, was du eigentlich willst. abre da du einen OUTER JOIN auf die tabelle loginoon machst und die eventuell einschränken auf diese tabelle hast, sollte die Bedinung mit in die JOIN bedinung und nicht in die WHERE klausel, sonst klappt der OUTER JOIN nicht mehr.

    SELECT zf_id_ga, timestamp_ga, datum, user_ga, arbeitsbeginn_ga,
           arbeitsende_ga, kontrGL, kontr, loginoon.kennung, loginoon.gebiet
    FROM gazeiterfassung
    LEFT JOIN loginoon ON loginoon.kennung=gazeiterfassung.user_ga AND loginoon.kennung='".$_SESSION["MM_Username"]."'"
    ;

    Ilja

    1. moin,

      wie frank schon sagte, schwierig nachzuvollziehen, was du eigentlich willst. abre da du einen OUTER JOIN auf die tabelle loginoon machst und die eventuell einschränken auf diese tabelle hast, sollte die Bedinung mit in die JOIN bedinung und nicht in die WHERE klausel, sonst klappt der OUTER JOIN nicht mehr.

      SELECT zf_id_ga, timestamp_ga, datum, user_ga, arbeitsbeginn_ga,
             arbeitsende_ga, kontrGL, kontr, loginoon.kennung, loginoon.gebiet
      FROM gazeiterfassung
      LEFT JOIN loginoon ON loginoon.kennung=gazeiterfassung.user_ga AND loginoon.kennung='".$_SESSION["MM_Username"]."'"
      ;

      Ilja

      Hallo Ilja,

      Danke für deine Antwort,

      werde ich wenn es mir möglich ist gleich mal testen, vielleicht ist das ja die Lösung, hab nähmlich alles probiert, jedoch die Session immer unter der WHERE klausel eingebunden.

      Meine Tabellen und Erklärungen, hab ich schon bei frank beantwortet, vielleicht wirds dadurch verständlicher.

      mfg

      Rainer

      1. moin,

        wie frank schon sagte, schwierig nachzuvollziehen, was du eigentlich willst. abre da du einen OUTER JOIN auf die tabelle loginoon machst und die eventuell einschränken auf diese tabelle hast, sollte die Bedinung mit in die JOIN bedinung und nicht in die WHERE klausel, sonst klappt der OUTER JOIN nicht mehr.

        SELECT zf_id_ga, timestamp_ga, datum, user_ga, arbeitsbeginn_ga,
               arbeitsende_ga, kontrGL, kontr, loginoon.kennung, loginoon.gebiet
        FROM gazeiterfassung
        LEFT JOIN loginoon ON loginoon.kennung=gazeiterfassung.user_ga AND loginoon.kennung='".$_SESSION["MM_Username"]."'"
        ;

        Ilja

        Hallo Ilja,

        Danke für deine Antwort,

        werde ich wenn es mir möglich ist gleich mal testen, vielleicht ist das ja die Lösung, hab nähmlich alles probiert, jedoch die Session immer unter der WHERE klausel eingebunden.

        Meine Tabellen und Erklärungen, hab ich schon bei frank beantwortet, vielleicht wirds dadurch verständlicher.

        mfg

        Rainer

        Hallo Ilja,

        ja auch mit deiner möglichkeit, erhalte ich bei Einbindung des USER über Session, keinen Zugriff auf alle jene USER die die selbe "gebietsnummer" haben.

        mfg

        Rainer

        1. moin,

          full quotes sind nicht sinnvoll, unterlasse sie bitte. zum anderen ist es wirklich schwierig, aus deinen beschreibungen das herauszufinden, was du eigentlich willst. deine abfrage wird letzlich für datenbank-profis trivial sein, die kompliziertheit besteht also alleine in der begabung, die kristall-kugel zu verwenden. aber ich glaube zu ahnen/vermuten/raten, was du suchst.

          SELECT hier_deine_spalten
          FROM gazeiterfassung ge
          INNER JOIN loginoon li ON li.kennung = ge.user_ga
          WHERE li.gebiet = (SELECT li2.gebit
                             FROM loginoon li2
                             WHERE li2.kennung='hier_die_session'
                            )
          ;

          Ilja

          1. moin,

            full quotes sind nicht sinnvoll, unterlasse sie bitte. zum anderen ist es wirklich schwierig, aus deinen beschreibungen das herauszufinden, was du eigentlich willst. deine abfrage wird letzlich für datenbank-profis trivial sein, die kompliziertheit besteht also alleine in der begabung, die kristall-kugel zu verwenden. aber ich glaube zu ahnen/vermuten/raten, was du suchst.

            SELECT hier_deine_spalten
            FROM gazeiterfassung ge
            INNER JOIN loginoon li ON li.kennung = ge.user_ga
            WHERE li.gebiet = (SELECT li2.gebit
                               FROM loginoon li2
                               WHERE li2.kennung='hier_die_session'
                              )
            ;

            Ilja

            Hallo Ilja,

            Ich weis, "sehr spät" aber unser Umzug hatte vorrang.

            Danke für dein Verständnis, hab aus deinen Antworten einiges gelernt.
            Auch für die Lösung meines Problemes, möchte ich mich nochmals bedanken.

            Dank, auch an alle anderen die mitgeholfen haben.

            mfg

            Rainer