xpfreund: MySql 5.0 -Fehler

Hallo,

warum schlägt eigentlich diese Abfrage schief?
select A.nachname as from_nachname, B.nachname as to_nachname, deadline
                  from todo, users as A
             left join users as B on B.ID = todo.ext
Unbekannte Spalte "ext", obwohl sie vorhanden ist. Fehler 1054
Habt ihr ne Ahnung?

gruß aus Senftenberg am See

  1. Hallo,

    ich bin nicht so SQL bewandert, jedoch stellt sich mir die Frage,
    _was_ du ueberhaupt retrieven moechtest!

      
    select  
     A.nachname as from_nachname,  
     B.nachname as to_nachname,  
     deadline <== welche Tabelle?  
    from  
     todo,  <== warum im From wenn du nachher joinst?  
     users as A  
    left join  
     users <== A, B ??  
     as B on B.ID = todo.ext  
    
    

    Alles ein wenig durcheinander...

    MfG
    Sympathizer

    1. Hallo,

      select A.nachname as from_nachname, B.nachname as to_nachname, todo.deadline
                        from todo, users as A
                   left join users as B on B.ID = todo.ext
                   where todo.ext = 8

      eine Tabelle todo, die die Spalte ext enthält und eine Tabelle users, die díe Spalte nachname enthält.
      Es sollen alle Datensätze aus todo rausgesucht werden, welche in ext 8 stehen haben. Weiterhin soll statt der 8 der Nachname des Users Nr. 8 (Id) zu jedem Datensatz angezeigt werden.

      gruß aus Senftenberg am See

    2. Hallo,

      Hallo,

      ich bin nicht so SQL bewandert, jedoch stellt sich mir die Frage,
      _was_ du ueberhaupt retrieven moechtest!

      select
      A.nachname as from_nachname,
      B.nachname as to_nachname,
      deadline <== welche Tabelle?
      from
      todo,  <== warum im From wenn du nachher joinst?
      users as A
      left join
      users <== A, B ??
      as B on B.ID = todo.ext

      
      >   
      > Alles ein wenig durcheinander...  
      
      Nachdem was ich gefunden hab, geht das auch so.  
      SELECT todo.deadline, users.nachname  
      FROM todo, users  
      WHERE todo.ext = users.ID  
      AND todo.ext =8  
        
      gruß aus [Senftenberg](http://www.senftenberg.de/) am [See](http://www.senftenberger-see.de/)
      
      1. Hallo

        Nachdem was ich gefunden hab, geht das auch so.
        SELECT todo.deadline, users.nachname
        FROM todo, users
        WHERE todo.ext = users.ID
        AND todo.ext =8

        der explizite LEFT-Join bricht das Statement, lies die von mir verlinkte Handbuchseite.

        Lies nach, welche Änderungen sich in MySQL 5.0.12 für die Verarbeitung von
        Joins ergeben. Genau aus diesen Gründen bevorzuge ich explizite Joins.

        Freundliche Grüße

        Vinzenz

  2. Hallo,

    select A.nachname as from_nachname, B.nachname as to_nachname, deadline
                      from todo, users as A
                 left join users as B on B.ID = todo.ext
    Unbekannte Spalte "ext", obwohl sie vorhanden ist. Fehler 1054

    seit 5.0.12 werden solche schlampigen Statements mit einer Fehlermeldung quittiert, siehe Handbuch.

    Grüße

    Vinzenz

    1. Hallo,

      Hallo,

      select A.nachname as from_nachname, B.nachname as to_nachname, deadline
                        from todo, users as A
                   left join users as B on B.ID = todo.ext
      Unbekannte Spalte "ext", obwohl sie vorhanden ist. Fehler 1054

      seit 5.0.12 werden solche schlampigen Statements mit einer Fehlermeldung quittiert, siehe Handbuch.

      Dann zeige ich dir hier mal den Originalcode, den erfahrene Programmierer geschrieben haben, beim Phprojekt 4.2.4.
      $fields = array("remark","note","deadline","anfang","priority","progress",);
      $f_lang = array($todo_text6,$todo_text5,$rts_18, $info_text7,$r_proj2,  $proj_start,$rts_38,   $todo_text4);
      $query = "select A.nachname as from_nachname, B.nachname as to_nachname, ".implode(",",$fields)."
                        from ".DB_PREFIX."todo, ".DB_PREFIX."users as A
                   left join ".DB_PREFIX."users as B on B.ID = ext
                       where (".DB_PREFIX."todo.acc like 'system' or ((von =                           $user_ID or ext = $user_ID or ".DB_PREFIX."todo.acc like 'group' or ".DB_PREFIX."todo.acc like '%"$user_kurz"%') and
      ".DB_PREFIX."todo.gruppe = $user_group)) and                                                A.ID = ".DB_PREFIX."todo.von
                    order by deadline desc";
      Also sag du mir nicht ich hab den Müll programmiert.

      gruß aus Senftenberg am See

      1. Hallo

        seit 5.0.12 werden solche schlampigen Statements mit einer Fehlermeldung quittiert, siehe Handbuch.
        Dann zeige ich dir hier mal den Originalcode, den erfahrene Programmierer geschrieben haben, beim Phprojekt 4.2.4.

        $query = "select A.nachname as from_nachname, B.nachname as to_nachname, ".implode(",",$fields)."
                          from ".DB_PREFIX."todo, ".DB_PREFIX."users as A
                     left join ".DB_PREFIX."users as B on B.ID = ext
                         where (".DB_PREFIX."todo.acc like 'system' or ((von =                           $user_ID or ext = $user_ID or ".DB_PREFIX."todo.acc like 'group' or ".DB_PREFIX."todo.acc like '%"$user_kurz"%') and
        ".DB_PREFIX."todo.gruppe = $user_group)) and                                                A.ID = ".DB_PREFIX."todo.von
                      order by deadline desc";

        ja und? Schlampig bleibt schlampig. Und MySQL bestraft inzwischen immer öfter
        Schlampigkeit. Es gab und gibt genügend (PHP-)Anwendungen, die mit MySQL 5.0
        erst nach einer Komplettüberarbeitung zusammenarbeiten, weil sie sich auf das
        schlampige Verhalten von MySQL vor 5.0.12 verlassen hatten.

        Freundliche Grüße

        Vinzenz

        1. Hallo,

          $query = "select A.nachname as from_nachname, B.nachname as to_nachname, ".implode(",",$fields)."
                            from ".DB_PREFIX."todo, ".DB_PREFIX."users as A
                       left join ".DB_PREFIX."users as B on B.ID = ext
                           where (".DB_PREFIX."todo.acc like 'system' or ((von =                           $user_ID or ext = $user_ID or ".DB_PREFIX."todo.acc like 'group' or ".DB_PREFIX."todo.acc like '%"$user_kurz"%') and
          ".DB_PREFIX."todo.gruppe = $user_group)) and                                                A.ID = ".DB_PREFIX."todo.von
                        order by deadline desc";

          Was meinst du wie man das ändern sollte, so einfach wie unten geht das ja auch nicht? Spalte Nachname von, dann Spalte Nachname ext und dann die restlichen Spalten.

          gruß aus Senftenberg am See

          1. Hallo,

            Was meinst du wie man das ändern sollte

            so wie es der von mir bereits verlinkten Handbuchseite zu entnehmen ist.
            Der Fehler wird dort aufgeführt.

            <zitat>
                "Also, some queries that appeared to work correctly in older versions
                must be rewritten to comply with the standard."
            </zitat>

            Ich betone: "that appeared to work correctly"

            Freundliche Grüße

            Vinzenz

            1. Hallo,

              Hallo,

              Was meinst du wie man das ändern sollte

              so wie es der von mir bereits verlinkten Handbuchseite zu entnehmen ist.
              Der Fehler wird dort aufgeführt.

              <zitat>
                  "Also, some queries that appeared to work correctly in older versions
                  must be rewritten to comply with the standard."
              </zitat>

              Ich betone: "that appeared to work correctly"

              Da wurde ja ordentlich verändert. Den Teil muss ich wohl überlesen haben.
              Besten Dank

              gruß aus Senftenberg am See