Daniel: MySQL Abfrage

Ahoi @ll,

ich habe gerade ein kleines (denk) problem. ich habe eine Aufgabenverwaltung geschrieben und habe 2 tabellen:

benutzer:
----------------------------
| id  | vorname | nachname |
----------------------------

aufgabe:
-----------------------------------------------------------
| zu_erledigen_von_id | erstellt_von_id | aufgabendaten....
-----------------------------------------------------------

Ich gebe die daten aus, kein problem. nun soll man filtern können.
sowohl auf vor/nachname des erstellers als auch vor/nachname
desjenigen der es erledigen soll. und da liegt der hund begraben. ich
habe ein inner join für den der es erledigen soll, das funktioniert
auch alles einwandfrei, nur weis ich nicht wie ich das 2te inner join
machen muss um eine unterscheidung hinzubekommen, ein benutzer.vorname
as abc geht ja nicht da es auf beides wirkt.

MfG

--
Alle Angaben wie immer ohne Gewähr
  1. echo $begrüßung;

    ich habe ein inner join für den der es erledigen soll, das funktioniert
    auch alles einwandfrei, nur weis ich nicht wie ich das 2te inner join
    machen muss um eine unterscheidung hinzubekommen

    Joine die Tabelle benutzer ein zweites Mal und vergib dabei einen anderen Alias.

    echo "$verabschiedung $name";

    1. Ahoi dedlfix,

      Joine die Tabelle benutzer ein zweites Mal und vergib dabei einen anderen Alias.

      und wie genau sehe das aus? ich hab noch nie mit nem Alias gejoint, oder
      müsste das über heißen, oder gar ganz anders? aufjedenfall habe ich
      bisher keine alias benutzt.

      MfG

      --
      Alle Angaben wie immer ohne Gewähr
      1. echo $begrüßung;

        Joine die Tabelle benutzer ein zweites Mal und vergib dabei einen anderen Alias.

        und wie genau sehe das aus?

        SELECT aufgabe.*, b1.nachname AS name_erledigen, b2.nachname AS name_erstellt  
        FROM aufgabe  
        JOIN benutzer AS b1 ON b1.id=aufgabe.zu_erledigen_von_id  
        JOIN benutzer AS b2 ON b2.id=aufgabe.erstellt_von_id  
        WHERE ...
        

        Vermutlich wirst du ein LEFT JOIN nehmen wollen, da du sicher auch Datensätze ohne Zuordnung haben möchtest.

        echo "$verabschiedung $name";

        1. Ahoi dedlfix,

          Vermutlich wirst du ein LEFT JOIN nehmen wollen, da du sicher auch Datensätze ohne Zuordnung haben möchtest.

          nein, jede aufgabe wurde von einem benutzer erstellt und soll von einem
          u.U. anderen erledigt werden. daher INNER JOIN.

          MfG

          --
          Alle Angaben wie immer ohne Gewähr
          1. echo $begrüßung;

            nein, jede aufgabe wurde von einem benutzer erstellt und soll von einem
            u.U. anderen erledigt werden. daher INNER JOIN.

            Unterschiedliche Benutzer sind nicht relevant. Wichtig ist nur, ob beispielsweise der Ersteller schon eingetragen ist, und der Erlediger noch nicht (id=0). Dann findet der erste INNER JOIN zwar einen benutzer-Eintrag für den Ersteller aber der zweite keinen für den Erlediger. Der Datensatz ist dann nicht mit in der Ergebnismenge enthalten.

            Wenn das so gewünscht ist, oder nicht vorkommt, weil immer Ersteller und Erlediger eingetragen sind, dann tuts natürlich auch der INNER JOIN.

            echo "$verabschiedung $name";

            1. Ahoi dedlfix,

              Wenn das so gewünscht ist, oder nicht vorkommt, weil immer Ersteller und Erlediger eingetragen sind, dann tuts natürlich auch der INNER JOIN.

              Das ist der Fall, wenn ein neuer eintrag zu den aufgaben hinzukommt,
              dann weis ich, bzw das script welcher Benutzer den Eintrag erstellt, da
              das ganze über ein PHP Formular läuft und dort jmd ausgewählt werden
              muss der es erledigen soll ist auch hier dann eine ID vorhanden, es gibt
              noch eine status spalte ob die aufgabe noch offen oder schon erledigt ist.

              Hab das jetzt eingefügt und bekomme diese Fehlermeldung:
              Column: 'nachname_user' in where clause is ambiguous
              was hat das zu bedeuten?
              ambiguous bedeutet laut leo.org soviel wie mehrdeutig
              http://dict.leo.org/?lp=ende&lang=de&searchLoc=0&cmpType=relaxed&relink=on&sectHdr=on&spellToler=std&search=ambiguous

              MfG

              --
              Alle Angaben wie immer ohne Gewähr
              1. echo $begrüßung;

                Hab das jetzt eingefügt und bekomme diese Fehlermeldung:
                Column: 'nachname_user' in where clause is ambiguous
                was hat das zu bedeuten?
                ambiguous bedeutet laut leo.org soviel wie mehrdeutig

                Richtig. Du hast sicherlich vergessen, den Aliasnamen der Tabelle davor zu schreiben.

                echo "$verabschiedung $name";

                1. Ahoi dedlfix,

                  Richtig. Du hast sicherlich vergessen, den Aliasnamen der Tabelle davor zu schreiben.

                  wo? es sieht so aus, vll hilfts weiter:

                  SELECT *,
                  b2.vorname_user AS vorname_ersteller,
                  b2.nachname_user AS nachname_ersteller,
                  b1.vorname_user AS vorname_erlediger,
                  b1.nachname_user AS nachname_erlediger FROM aufgaben
                  INNER JOIN benutzer AS b1 ON(b1.id_user = aufgaben.user_id)
                  INNER JOIN benutzer AS b2 ON(b2.id_user = aufgaben.erstellt_user_id) ORDER BY datum_uhrzeit desc

                  wo fehlt da was?

                  MfG

                  --
                  Alle Angaben wie immer ohne Gewähr
                  1. echo $begrüßung;

                    Column: 'nachname_user' in where clause is ambiguous

                    SELECT *,
                    b2.vorname_user AS vorname_ersteller,
                    b2.nachname_user AS nachname_ersteller,
                    b1.vorname_user AS vorname_erlediger,
                    b1.nachname_user AS nachname_erlediger FROM aufgaben
                    INNER JOIN benutzer AS b1 ON(b1.id_user = aufgaben.user_id)
                    INNER JOIN benutzer AS b2 ON(b2.id_user = aufgaben.erstellt_user_id) ORDER BY datum_uhrzeit desc

                    wo fehlt da was?

                    Wo: vor dem ORDER BY
                    Was: die beanstandete WHERE-Klausel

                    echo "$verabschiedung $name";

                    1. Ahoi dedlfix,

                      Wo: vor dem ORDER BY
                      Was: die beanstandete WHERE-Klausel

                      oh, hab ich doch glatt das WHERE mitweggeschnipselt als ich die ganzen
                      anderen inner joins rausgeschmissen habe. hab jetzt vor den aliasnamen
                      das b1 bzw. b2 gesetzt. jetzt meint er er kennt diese spalte nicht.

                      MfG

                      --
                      Alle Angaben wie immer ohne Gewähr
                      1. echo $begrüßung;

                        hab jetzt vor den aliasnamen das b1 bzw. b2 gesetzt. jetzt meint er er kennt diese spalte nicht.

                        Du musst den Aliasnamen der Tabelle aber den echten Spaltennamen nehmen (b2.nachname, b1.vorname, etc.).

                        echo "$verabschiedung $name";

                        1. Ahoi dedlfix,

                          Du musst den Aliasnamen der Tabelle aber den echten Spaltennamen nehmen (b2.nachname, b1.vorname, etc.).

                          *grml* naja danke, jetzt funktionierts einwandfrei.

                          MfG

                          --
                          Alle Angaben wie immer ohne Gewähr