Fehlermeldung mit Join

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

  • Fehlermeldung mit Join

    Hallo,

    ich weis das dieses Thema schon sehr oft behandelt wurde und ich denke auch dass ich alle Posts durchgelesen hatte die mir hätten helfen können, jedoch bekomme ich trotzdem immer noch folgende Fehlermeldung:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/web15/html/sms/outbox.php on line 88
    Wobei die Zeile 88 folgendes enthält :
    PHP-Code:
    while($row mysql_fetch_array($result)) 
    also denke ich mal dass die Abfrage fehlerhaft ist.

    Ich habe folgendes vor :

    Tabelle sms_senden :
    id || sender || empaenger || text || status_id

    Tabelle sms_antworten :
    id || sms_id || antwort || absender ||

    Die Inhalte von 'status_id' und 'sms_id' sind gleich und sollen
    verglichen werden um den Inhalt von 'antwort' mit dem Inhalt
    von 'text' verglichen werden.

    z.B.

    Tabelle sms_senden
    id || sender || empaenger || text || status_id
    1 || 12345 || 4567879 || testSMS || 1364120218

    Tabelle sms_antworten
    id || sms_id || antwort || absender
    5 || 1364120218 || Die Antwort || 4567879

    Nun möchte ich folgende Tabelle im Script ausgeben :

    ..... || absender || empfaenger || Text || Antwort ...

    und rein muss dann :

    ..... || 12345 || 4567879 || testSMS || Die Antwort ...
    Ohne Vergleich also nur den gesendeteten Text zu protokollieren habe ich folgenden Code genommen
    PHP-Code:
    ... 
    $result mysql_query("SELECT * FROM smsbox_senden 
    WHERE sender='
    $_SESSION[nummer]
    ORDER BY id ASC 
    LIMIT "
    .$start.",".$eintraege_pro_seite); 
    while(
    $row mysql_fetch_array($result)) 
      { 
           
    $text $row["text"]; 
           
    trim ($text); 
           echo 
    " .... table .... "
           echo 
    $row["sender"
           echo 
    $row["empfaenger"
           echo 
    $row["text"
           echo 
    " .... table ....."

    und um mit dem Join zu arbeiten folgenden
    PHP-Code:
    $result mysql_query("SELECT * FROM smsbox_protokoll 
    LEFT JOIN smsbox_antworten 
    ON sms_id = status_id 
    WHERE sender='
    $_SESSION[nummer]
    ORDER BY id ASC LIMIT "
    .$start.",".$eintraege_pro_seite); 
    aber halt mit einer Fehlermeldung.
    Hat jemand zufällig eine Idee was ich falsch gemacht habe ?

    Wäre Super - Danke und Gruss

  • #2
    http://www.php-resource.de/forum/sho...threadid=50454
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Upppsss sorry !
      Column: 'id' in order clause is ambiguous
      was für mich nicht wirklich aussagekräftig ist.

      Gruss und Danke

      Kommentar


      • #4
        Ich habe nun mal 'alias' für die Abfrage vergeben, damit das Script auch
        weis nach welchen 'id' er sortieren soll, denn laut Übersetzung soll das
        Wort -> ambiguous -> vieldeutig bedeuten.

        Nun bekomme ich aber folgende Fehlermeldung :
        You have an error in your SQL syntax near 'WHERE smsbox_protokoll.sender='00491796814560' ORDER BY smsbox_protokoll.id ASC LIMIT 0,5' at line 1
        Gruss und Danke

        Kommentar


        • #5
          und was steht davor im sql?
          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
            PHP-Code:
            $result mysql_query("SELECT * 
            FROM smsbox_protokoll 
            LEFT JOIN smsbox_antworten 
            WHERE smsbox_protokoll.sender='
            $_SESSION[nummer]
            ORDER BY smsbox_protokoll.id 
            ASC LIMIT "
            .$start.",".$eintraege_pro_seite)
             or die(
            mysql_error().'<hr />'.'euer SQL'.'<hr />'); 
            ich möchte ja ganz normal alle Felder von der
            Tabelle 'smsbox_protokoll' mit mit einer Schleife
            mit $row["...."] auslesen können nur möchte ich
            zusätzlich von der Tabelle 'smsbox_antworten'
            das Feld 'sms_id' mit einem Vergleich von 'status_id'
            zusätzlich ausgeben können in dem der Wert von
            beiden Tabellen gleich ist.

            Also im Prinzip sowas nur nicht ganz so Resourcen fressend:
            PHP-Code:
            ....
            $result mysql_query("SELECT * FROM smsbox_protokoll 
            WHERE sender='
            $_SESSION[nummer]
            ORDER BY id ASC LIMIT "
            .$start.",".$eintraege_pro_seite);

            while(
            $row mysql_fetch_array($result))

            {
              echo 
            $row["datum"]; 
              echo 
            $row["uhrzeit"]; 
              echo 
            $row["empfaenger"];
              echo 
            $row["text"];

             
            $sms_antwort=($row["status_id"]);

             
            $result2 mysql_query("SELECT * FROM smsbox_antworten 
             WHERE  sms_id='
            $sms_antwort'");

             
            $row2 mysql_fetch_array($result2)

              echo 
            $row2["antwort"];

            Danke !

            Kommentar


            • #7
              Original geschrieben von celina
              PHP-Code:
              $result mysql_query("SELECT * 
              FROM smsbox_protokoll 
              LEFT JOIN smsbox_antworten 
              WHERE smsbox_protokoll.sender='
              $_SESSION[nummer]
              ORDER BY smsbox_protokoll.id 
              ASC LIMIT "
              .$start.",".$eintraege_pro_seite)
               or die(
              mysql_error().'<hr />'.'euer SQL'.'<hr />'); 
              wo ist das ON für den JOIN geblieben ...?
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                O.K. mit ON funktioniert es, zumindest die Abfrage von zwei Tabellen
                aber irgendwie bringt er die Tabellen nun komplett durcheinander.

                Kann oder muss ich bei der $row-Abfrage sagen von
                welcher Tabellen gelesen werden soll , hier mal mein Code :

                PHP-Code:
                <?
                $result = mysql_query("SELECT * FROM smsbox_protokoll 
                LEFT JOIN smsbox_antworten 
                ON sms_id = status_id 
                WHERE smsbox_protokoll.sender='$_SESSION[nummer]' 
                ORDER BY smsbox_protokoll.id DESC LIMIT ".$start.",".$eintraege_pro_seite)
                 or die(mysql_error().'<hr />'.'euer SQL'.'<hr />');

                while($row = mysql_fetch_array($result))
                  {
                  if ($row["antwort"]=='')
                  {
                  $antwort='Keine Antwort vorhanden';
                  } else {
                  $antwort=($row["antwort"]);
                  }
                ?>
                <tr>
                 <td><? echo $row["datum"] ?>&nbsp;<? echo $row["uhrzeit"]; ?>&nbsp;&nbsp;</td>
                 <td><? echo $row["sender"]; ?></td>
                 <td><? echo $row["empfaenger"]; ?></td>
                </tr>
                <tr>
                  <td>Text</td>
                  <td><? echo trim ($row["text"]); ?></td>
                </tr>
                <tr>
                   <td>Antwort &raquo; </td>
                   <td><? echo $antwort; ?></td>
                </tr>
                <?php ?>
                -> $row["antwort"] soll aus der anderen Tabelle gelesen werden

                Gruss und Danke

                Kommentar


                • #9
                  hi also ich habs nich komplett gelesen aber deine letzte frage zumindest ...

                  erstmal: select * is immer schlecht besonders bei mehreren Tabellen. Nuimm nur die columns die Du brauchst und bennene sie auch wenn es alle sind.

                  Wenn in beiden Tabellen ein Feld mit dem namen antwort existiert, dann wird in Deiner schleife das array element mit dem index antwort immer wieder überschrieben --> benutze ein alias.

                  SELECT a.antwort antwort_a, b.antwort antwort_b z.B.
                  das alias ist dann der index deines resultsets
                  Beantworte nie Threads mit mehr als 15 followups...
                  Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                  Kommentar


                  • #10
                    mal so am Rande, das hier
                    if ($row["antwort"]=='')
                    {
                    $antwort='Keine Antwort vorhanden';
                    } else {
                    $antwort=($row["antwort"]);
                    }

                    ist ein ideales konstruct für den dreifach konditionalen Operator

                    $antwort = ($row["antwort"]=='') ? 'Keine Antwort vorhanden':$row["antwort"];

                    kannst Dir statt == '' auch mal die funktion empty() anschauen
                    Beantworte nie Threads mit mehr als 15 followups...
                    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                    Kommentar


                    • #11
                      Hallo,

                      ja Datum und Uhrzeit sind in beiden Tabellen gleich
                      und das ist auch das was durcheinander kommt.
                      Aber das mit dem alias habe ich noch nicht ganz verstanden.

                      SELECT a.antwort antwort_a, b.antwort antwort_b z.B.
                      das alias ist dann der index deines resultsets
                      Es ist halt recht viel das ich selectieren muss.

                      Also antwort...... usw. kann ich ja lassen da nur einmal

                      Was ist in Deinem Beispiel der alias und was das Feld bzw
                      die Tabelle.

                      Ich habe das Feld 'datum' und 'uhrzeit' in der Tabelle
                      'smsbox_protokoll' und auch in 'smsbox_antworten'

                      Die Funktion emty() benutze ich woanders auch im Script
                      aber Deine Abkützung kenne ich nicht sieht interessant
                      aus, wo kann ich mehr darüber lesen.


                      Gruss und Danke

                      Kommentar


                      • #12
                        das alias steht immer hinter dem spalten namen

                        SELECT column alias FROM table
                        zwischen col und alias kannste auch ein AS setzen aber das brauchste nich
                        Beantworte nie Threads mit mehr als 15 followups...
                        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                        Kommentar


                        • #13
                          Ja gut aber ich habe ja nur ein FROM
                          und müsste ja zwei mal das Datum deklerieren.

                          SELECT datum datum_a, datum datum_b FROM

                          geht ja auch nicht, da es ja an der aktuellen
                          Tatsache nichts ändern würde.

                          Gruss und Danke

                          Kommentar


                          • #14
                            ja du musst dem datum noch die tabelle zuweisen
                            SELECT a.datum a_datum, b.datum b_datum
                            FROM tab1 a LEFT JOIN tab2 b ON ....
                            Beantworte nie Threads mit mehr als 15 followups...
                            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                            Kommentar

                            Lädt...
                            X