while($row = mysql_fetch_object($sql))

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

  • while($row = mysql_fetch_object($sql))

    Hallo,
    hat jemand eine Antwort warum ich nur die erste Zeile ausgegeben bekomme?
    Der Rest wird nicht angezeigt. Warum?

    PHP-Code:
    <?php 
    include 'checkuser.php'
    include 
    'connection.php';

    $sql mysql_query('SELECT * FROM usermailbox WHERE touserid = '.$_SESSION["session_id"]);
      while(
    $row mysql_fetch_object($sql))
      {
        
    $sql2 mysql_fetch_array(mysql_query('SELECT * FROM user WHERE id = '.$row->fromuserid));
        echo 
    '<a href=index.php?content=profil&id='.$sql2[id].'>'.$sql2[username].'</a><hr><br>';
      }
    ?>

  • #2
    Benutze bitte einen vernünftigen (LEFT) JOIN für dein Vorhaben, sowie eine sinnvolle html - Syntax (Argumente in Anführungszeichen fassen, wie z.B. <a href="...")...

    Kommentar


    • #3
      So, habe es mit INNER JOIN einmal probiert.
      Nur finde ich keine BeispielSyntax für meine Frage.
      Aber die ist denke ich mal leicht zu beantworten.
      Also wenn mir da jemand kurz helfen mag

      PHP-Code:
      <?php 
      include 'checkuser.php'
      include 
      'connection.php';

      $sql mysql_query('SELECT * FROM usermailbox INNER JOIN user ON usermailbox.touserid = user.id');
        while(
      $row mysql_fetch_object($sql))
        { 
          echo 
      $row->touserid.$sql[usermailbox.usertext];
        }
      ?>
      In der while-schleife beim ausgeben der $sql[usermailbox.usertext] funktioniert es nicht. Wie soll ich das schreiben?
      $row->usermailbox.usertext funktioniert auch nicht.

      Kommentar


      • #4
        Ich habe es gefunden.
        Ganz simples:
        PHP-Code:
        $row->usertext
        Soetwas dachte ich mir aber nicht da ich im moment erstaunt darüber bin das das funktioniert.
        Denn was wäre, wenn in beiden Tabellen die mit INNER JOIN zusammengefügt werden 2 mal der selbe Spaltenname auftaucht ?
        Ich müsse doch eigentlich direkt ansprechen mit:
        PHP-Code:
        $row->usermailbox.usertext 
        Warum ist das so?
        Oder übersehe ich da was

        Kommentar


        • #5
          Denn was wäre, wenn in beiden Tabellen die mit INNER JOIN zusammengefügt werden 2 mal der selbe Spaltenname auftaucht ?
          Dann würdest du den gewünschten Spaltennamen explizit auswählen und dem aus der anderen Tabelle entweder einen anderen alias geben, oder ihn gleich verwerfen.

          Ich müsse doch eigentlich direkt ansprechen mit: $row->usermailbox.usertext
          Wie man auf so nen Quatsch kommt, ist mir ein Rätsel. Ich kann das Manual nicht annähernd so ähnlich interpretieren.

          Kommentar


          • #6
            Nunja, habe mir ein Beispiel rausgesucht und dabei das gefunden:
            http://v.hdm-stuttgart.de/~riekert/l....htm#innerjoin
            Und dort heißt der Spaltenname nach dem INNER JOIN: Mitarbeiter.Nachname usw.
            Daher bin ich davon mal stark ausgegangen das ich die Spalte auch mit dem korrekten Namen anspreche.
            Aber der geänderte Name dient wohl nur dem bildlichen Verständnis.

            Kommentar


            • #7
              Original geschrieben von phpMorpheus2
              Ich habe es gefunden.
              Wenn du statt SELECT * FROM zu schreiben, die Attribute aufgezählt hättest, hätten wir dir das auch sagen können. SELECT * FROM in einer einzelnen Abfrage ist einfach schlecht, in einem JOIN kann es den Server lahm legen.
              Original geschrieben von phpMorpheus2
              Denn was wäre, wenn in beiden Tabellen die mit INNER JOIN zusammengefügt werden 2 mal der selbe Spaltenname auftaucht ?
              Ich müsse doch eigentlich direkt ansprechen mit:
              PHP-Code:
              $row->usermailbox.usertext 
              ist eine Möglichkeit. Besser ist es, Aliases zu benutzen:
              Code:
              SELECT 
              	m.usertext mailusertext,
              	u.usertext usertext,
              	u.username name,
              	...
              FROM 
              	usermailbox m 
              INNER JOIN 
              	user u ON m.touserid = u.id;
              Und dann ansprechen mit
              PHP-Code:
              $row->mailusertext;
              $row->usertext;
              $row->name
              Gruss
              H2O

              Kommentar


              • #8
                Original geschrieben von phpMorpheus2
                Nunja, habe mir ein Beispiel rausgesucht und dabei das gefunden:
                http://v.hdm-stuttgart.de/~riekert/l....htm#innerjoin
                Und dort heißt der Spaltenname nach dem INNER JOIN: Mitarbeiter.Nachname usw.
                Daher bin ich davon mal stark ausgegangen das ich die Spalte auch mit dem korrekten Namen anspreche.
                Aber der geänderte Name dient wohl nur dem bildlichen Verständnis.
                Das ist aber nicht MySQL, sondern die theoretisch perfekte relationale Algebra ... das ist ein kleiner Unterschied ^^;

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  H2O, es sind aber 2 verschiedene Tabellen !
                  eine heißt "user" und die andere "usermailbox".
                  Daher muss ich erstmal beide zusammenfassen.

                  Schaut mal:
                  Tabelle "user"

                  |_id_|_name
                  |_1_|_Ich
                  |_2_|_Ich2
                  |_3_|_Ich3

                  Tabelle "usermailbox"

                  |_id_|_fromuserid_|_touserid_|_usertext
                  |_1______2_________1________n1
                  |_2______3_________1________n2
                  |_3______4_________2________n3


                  Nun muss ich aus der usermailbox alle nachrichten rausfiltern die zu meiner id gehören. (meine id ist jetzt mal z.B. "1")

                  Habe es so versucht, doch kommt immer der selbe "name" aus der Tabelle "user" raus, obwohl es versch. absender sind:

                  PHP-Code:
                  $sql mysql_query('SELECT * FROM usermailbox INNER JOIN user ON usermailbox.touserid = '.$_SESSION["session_id"]);
                    while(
                  $row mysql_fetch_object($sql))
                    { 
                      echo 
                  '<a href=index.php?content=profil&id='.$row->fromuserid.'>'.$row->username.'</a>'.$row->usertext.'<hr><br>';
                    } 
                  Doch da kommt quatsch raus.
                  Ich bekomme PRO nachricht 3 ausgaben wie es an nachrichten gibt.
                  Sprich bei 3 nachrichten bekomme ich 9 nachrichten. die ersten 3 mit dem selben namen, die nächsten 3 mit einem anderen selben namen und die letzten auch.
                  Die verlinkung stimmt aber, also nur der username wird falsch angezeigt und auch viel zu oft, halt 3*3.

                  Kommentar


                  • #10
                    Original geschrieben von phpMorpheus2
                    H2O, es sind aber 2 verschiedene Tabellen !
                    eine heißt "user" und die andere "usermailbox".
                    Daher muss ich erstmal beide zusammenfassen.
                    Was hab ich denn anderes beschrieben?
                    Original geschrieben von phpMorpheus2

                    Doch da kommt quatsch raus.
                    Wen du Quatsch abfrägst kommt Quatsch raus!
                    PHP-Code:
                    $sql "
                        SELECT 
                            m.fromuserid,
                            m.touserid,
                            m.usertext
                        FROM 
                            usermailbox m
                        INNER JOIN 
                            user ON m.touserid = u.id
                        WHERE
                            u.id =  " 
                    $_SESSION['session_id'];
                    $res mysql_query($sql) || die(mysql_error());
                    while (
                    $row mysql_fetch_object($sql)){ 
                        echo 
                    "<a href='index.php?content=profil&amp;id=$row->fromuserid'>$row->username</a>$row->usertext<hr><br />";

                    Gruss
                    H2O

                    Kommentar


                    • #11
                      Die Tabelle "u" ist nicht definiert.

                      Kommentar


                      • #12
                        Ja klar! Lern Grundlagen und hör auf hier alles blind aus dem Forum zu kopieren! Natürlich musst du für die Tabelle user erstmal den alias u vergeben. Genauso wie es für usermailbox gemacht wurde.

                        Das ist ne simple Transferleistung, das hat nichtmal mit viel denke zu tun...

                        Kommentar


                        • #13
                          Ja das weiß ich doch. Das war keine Frage!
                          Sondern eine Feststellung.
                          Habe es anhand dieses Beispieles erkannt und konnte mir nun merken wie die Syntax in der Praxis funktioniert explizit auf mein Problem bezogen natürlich.

                          Kommentar


                          • #14
                            Dann frag ich mich, warum du eine Fehlermeldung hier postest, obwohl sie kein Problem darstellt. Ein einfaches "Danke, das war die Lösung" ist in diesem Falle verständlicher...

                            Kommentar


                            • #15
                              Ja ich war doch noch garnicht fertig mit meinem post. habe auf leertaste gedrückt und war zu faul kurz zu editieren.
                              Ganz locker bleiben

                              Also das Beispiel hat mir wirklich geholfen.
                              Danke

                              Kommentar

                              Lädt...
                              X