fehlende daten bei outer join

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

  • fehlende daten bei outer join

    hi,
    ich habe ein etwas kniffeliges problem, bei dem ich nicht weiterkomme:

    ich habe einen outer join, mit dem ich zwei tabellen abfrage.
    in tabelle a ist eine userliste mit user ids, der aus tabelle b die usernamen zugeordnet werden. verbunden werden die tabllen über die userid, die in beiden tabellen identisch ist:

    PHP-Code:
                $name=mysql_query("SELECT a.".$newcolb.", b.userid, b.username FROM table a, table b WHERE a.".$newcolb." = b.userid"); 
    ausgeben lasse ich mir das ganze mit:

    PHP-Code:
    while($zeile mysql_fetch_row($name)) { 
    echo 
    "$zeile[2]<br>"

    damit bekomme ich also in einer liste die namen der user angezeigt.

    so, bis hierhin funktioniert alles einwandfrei, nun mein problem:

    aus der usertabelle table b werden hin und wieder user entfernt. in der table a bleiben die ids aber noch gespeichert. das soll auch so sein.

    dadurch, dass in table b aber im join die usernamen fehlen, wird die die ausgabe verfälscht.

    meine frage:

    gibt es eine möglichkeit, eine leerzeile einzubauen, wenn im join für eine userid kein name gefunden wird? jetzt ist es so, dass einfach eine zeile verloren geht, ich hätte aber gerne in meiner auflistung einen marker, dass der user (dessen id in tabelle a zwar noch vorhanden ist) in tabelle b nicht mehr existiert.

    ich habe schon versucht folgendes in php in meine ausgabe einzubauen:


    PHP-Code:
    elseif($zeile[2]=="") { 
    echo
    "&nbsp;<br>"

    damit ging es aber nicht.

    ich habe auch schon im manual nachgesehen, komme aber nicht weiter, weil ich nicht weiss, in welcher syntax das problem liegt?

    kann ich das in php oder sql lösen?

    kann ich das überhaupt irgenwie lösen?

    ich hoffe, mein post ist nicht zu lang und ihr versteht mich, vielen dank im voraus...

  • #2
    echo "$zeile[2]<br>";
    ist BäH
    PHP-Code:
    echo $zeile[2] . "<br>"
    echo"&nbsp;<br>";
    in
    PHP-Code:
    echo "&nbsp;<br>"
    Woher kommt das elseif
    elseif($zeile[2]=="") {
    Offe

    Kommentar


    • #3
      PHP-Code:
      $name mysql_query("SELECT
                              a."
      .$newcolb.",
                              b.userid,
                              IF(b.username IS NULL, 'nicht vorhanden', b.username)
                           FROM
                              table a
                                  LEFT JOIN table b USING(userid)"
      ); 
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        @abraxax

        danke für die schnelle antwort, allerdings bekomme ich so gar keine anzeige mehr, egal in welchen feldern des array...

        also $name[0], $name[1]....

        sind alle leer....

        statt dessen aber den fehler

        Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/www/url/html/neutest.php on line 69



        (für die schlauen unter euch : natürlich habe ich an stelle der "table" meinen tabellennamen wieder eingefügt....)

        Kommentar


        • #5
          mach mal ein or die(mysql_error()) noch dran.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            habe ich und ich erhalte :

            Unknown column 'a.userid' in 'on clause'

            jau stimmt auch ... in dieser tabelle heisst die spalte ja auch nicht userid, sondern die spalte heisst anders, nur IN DER SPALTE befinden sich die user Ids

            die spalte heisst:

            PHP-Code:
            a.".$newcolb."
            ...danke für deine geduld...@abraxax
            Zuletzt geändert von dertom; 24.01.2004, 16:26.

            Kommentar


            • #7
              Original geschrieben von dertom
              ...danke für deine geduld...@abraxax
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                @abraxax

                öööhhmmm

                bin ich gerade plöt oder steh ich auffem schlauch??

                wie muss die abfrage denn nun aussehen, da die tabellenspalten andersnamig sind??? so funzt es doch nicht und bei einer lösung waren wir auch noch nicht angekommen.

                ich wollte den namen der spalte eigentlich nicht verändern! (kann ich auch garnicht, da er ja immer anders ist durch die variable)

                es muss aber doch einen weg geben, vorher ging es ja auch, bis eben auf die fehlenden....

                Kommentar


                • #9
                  ausgabe?

                  PHP-Code:
                  $sql "SELECT
                              a."
                  .$newcolb.",
                              b.userid,
                              IF(b.username IS NULL, 'nicht vorhanden', b.username)
                          FROM
                              table a
                                  LEFT JOIN table b USING(userid)"
                  ;

                  echo 
                  '<pre>'.$sql.'</pre>';

                  $name mysql_query($sql) or die(mysql_error()); 
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    ausgabe ist nach wie vor :

                    Code:
                    SELECT
                                a.d230104092116,
                                b.userid,
                                IF(b.username IS NULL, 'nicht vorhanden', b.username)
                            FROM
                                gg_ergwlos a
                                    LEFT JOIN mm_user b USING(userid)
                    
                    Unknown column 'a.userid' in 'on clause'
                    (auch wenn du jetzt maine table namen kennst *gg*)
                    Zuletzt geändert von Abraxax; 24.01.2004, 23:16.

                    Kommentar


                    • #11
                      benutze bitte beim nächten 'code'-posten auch die code-tags. ich habs mal geändert.

                      so ....
                      Unknown column 'a.userid' in 'on clause'
                      ... heisst, dass es die spalte userid in tabelle a nciht gibt.

                      wie heisst das feld dort also?
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        öhm die spalte heisst weiterhin

                        PHP-Code:
                        a.".$newcolb." 


                        (hab ich jetzt ieder was falsch gemacht? mal ist es code, quote, php.......)

                        Kommentar


                        • #13
                          Original geschrieben von dertom
                          [...] verbunden werden die tabllen über die userid, die in beiden tabellen identisch ist:
                          Original geschrieben von dertom
                          öhm die spalte heisst weiterhin
                          PHP-Code:
                          a.".$newcolb." 
                          ja und in $newcolb steht eben nicht userid drin, wie du es im ersten post (g|b)eschrieben hast.

                          Original geschrieben von dertom
                          (hab ich jetzt ieder was falsch gemacht? mal ist es code, quote, php.......)
                          ist doch ganz einfach...

                          code : bei reinen sql queries oder ausgaben
                          php : wenn du php-code postest
                          quote : wenn du jemanden zitierst.



                          teste mal diese query. hier habe ich das 'userid' mal so angepasst, dass es egal ist, wie es in tabelle a heisst. -> das hättest du auch mal selber machen können.

                          ausgabe?
                          PHP-Code:
                          $sql "SELECT
                                      a."
                          .$newcolb.",
                                      b.userid,
                                      IF(b.username IS NULL, 'nicht vorhanden', b.username)
                                  FROM
                                      table a
                                          LEFT JOIN table b ON b.userid = a."
                          .$newcolb;

                          echo 
                          '<pre>'.$sql.'</pre>';

                          $name mysql_query($sql) or die(mysql_error()); 
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14


                            super, das ist es schon mal teilweise!

                            ich hatte das auch selbst versucht, allerdings nicht mit dem LEFT JOIN ON,

                            sondern mit meinem ersten Ansatz dem WHERE clause. hatte das im manual somit falsch verstanden.


                            nun hab ich ein weiteres problem:

                            in der table a gibt es mehr felder als in der tabelle b (mit den richtigen bedingungen).

                            das heisst, die liste wird am ende mit jede menge "nicht vorhanden" aufgefüllt.

                            ich würde gerne noch in die abfrage ein LIMIT $irgendwas einbauen.

                            bekomme da aber dauernd fehlermeldungen.

                            wo muss ich das LIMIT dort einbauen?


                            p.s. du bist wirklich klasse! vielen dank für deine geduld und deine fachkompetenz!

                            Kommentar


                            • #15
                              LIMIT gehört an das ende der query. das steht alles bei www.mysql.com .
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X