Join

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

  • Join

    Hallo zusammen

    Ich ersuche um Eure wertvolle Hilfe.

    Ich habe alle meine Daten in einer Tabelle abgelegt, nach ID und mit Datum. Nun gibt es verschiedene Ergebnisse mit der selben ID und diversen Datum.

    Ich mache nun eine Suchabfrage und will nur jeweils ein Resultat mit dem neuestem Datum angezeit bekommen.

    Bis auf diese Einschränkkung würde die Abfrage funktieren - Also den folgenden CODE ohne die Left Join drin.
    PHP-Code:
    $datum_jetzt mktime(date ("H"),date ("i"),date ("s"), date ("m") , date ("d"), date("Y"));
    $abfrage_content mysql_query ("SELECT t0.content, t0.id, t0.update_time, t0.status, t0.sprache
    FROM 
    $tab_content t0 
    LEFT JOIN 
    $tab_content t1 USING (id) on t1.update_time <= '$datum_jetzt' desc limit 1
    WHERE t0.content LIKE '%
    $search%' && t0.update_time <= '$datum_jetzt' && t0.sprache = '$default_sprache'  order by update_time ");
    $gesamt_search_abfrage_search mysql_num_rows($abfrage_content); 
    Ich erhalte folgenden Fehler:
    HTML-Code:
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
    Sagt mir irgendwas stimmt nicht in der Left Join abfrage...aber ich komme einfach nicht dahinter.....

    Wer kann mir einen Tipp geben? DANKE

  • #2
    Nein, die Meldung sagt dir lediglich, dass die Ressource, die du an die Funktion mysql_num_rows übergeben hast, kein gültiges Abfrageergebnis ist. Das lässt zwar darauf schließen, dass diese fehlgeschlagen ist, aber was genau, das wird dir an dieser Stelle sicher nicht gesagt.

    Um herauszufinden, wo das Problem ist, haben wir ein paar Tipps zusammengefasst die grundlegendstes Debugging erklären. Schau mal in den Abschnitt "MySQL will nicht": Klick
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      1. $datum_jetzt is int nutz es auch als int und nicht als string.

      und

      2. das liest sich grottig.

      PHP-Code:
      $sql="SELECT t0.content, t0.id, t0.update_time, t0.status, t0.sprache
      FROM "
      .$tab_content." t0 
      LEFT JOIN "
      .$tab_content." t1 USING (id) 
      ON t1.update_time <= "
      .$datum_jetzt." DESC LIMIT 1
      WHERE t0.content LIKE '%"
      .$search."%' 
      AND t0.update_time <= "
      .$datum_jetzt.
      AND t0.sprache = '"
      .$default_sprache."'  
      ORDER BY update_time"

      Bitte Beachten.
      Foren-Regeln
      Danke

      Kommentar


      • #4
        Unset: was meinst Du genau damit? Wie kann ich es als int handeln?

        Das bekomme ich im Debug
        You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'on t1.update_time <= '1245922625' desc limit 1 WHERE t0.content LIKE '%mill%' ' at line 3
        Wyveres: Danke für das Script, komme aber nicht ganz weiter, kriege nach wie vor Fehler auf der Zeile
        PHP-Code:
        while ($row mysql_fetch_array ($abfrage_content)) 
        Ich habe Dein Beispiel genommen und in meine Struktur eingebunden....habe ich was flasch gemacht?

        PHP-Code:
        $datum_jetzt mktime(date ("H"),date ("i"),date ("s"), date ("m") , date ("d"), date("Y"));
        $abfrage_content mysql_query ("SELECT t0.content, t0.id, t0.update_time, t0.status, t0.sprache 
        FROM "
        .$tab_content." t0  
        LEFT JOIN "
        .$tab_content." t1 USING (id)  
        ON t1.update_time <= "
        .$datum_jetzt." DESC LIMIT 1 
        WHERE t0.content LIKE '%"
        .$search."%'  
        AND t0.update_time <= "
        .$datum_jetzt."  
        AND t0.sprache = '"
        .$default_sprache."'   
        ORDER BY update_time"
        );
        $gesamt_search_abfrage_search mysql_num_rows($abfrage_content);
        $nrv="0";
        while (
        $row mysql_fetch_array ($abfrage_content)) 

        Zuletzt geändert von sepp; 25.06.2009, 11:38.

        Kommentar


        • #5
          Zitat von sepp Beitrag anzeigen
          Unset: was meinst Du genau damit? Wie kann ich es als int handeln?
          Ich hab nix von int geschrieben, ich will nur, dass du mysql_error wie im verlinkten Beitrag beschrieben auswertest.
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            Ja, sorry das hatte ich verwechselt mit int......die Fehlerrutine habe ich durchlaufen lassen und im letzten Beitrag gepostet

            Kommentar


            • #7
              Dann guck dir die Fehlermeldung doch an, dir wird ja sogar der Abschnitt genannt, wo dein Query nicht in Order ist.
              [FONT="Helvetica"]twitter.com/unset[/FONT]

              Shitstorm Podcast – Wöchentliches Auskotzen

              Kommentar


              • #8
                Entweder USING oder ON. Beides zusammen geht nicht.

                Kommentar


                • #9
                  Ja, uset das Problem liegt da
                  't1.update_time <= '1245924804' desc limit 1 WHERE t0.content LIKE '%million%' ' at line 3
                  Das weiss ich eingentlich seit dem erstem Post....nur weiss ich keine Lösung dafür. Sorry


                  onemorenerd : Wenn ich entweder on oder USING entferne bekomme ich den selben fehler

                  Kommentar


                  • #10
                    Vielleicht liegts auch am Limit? Darf man das da verwenden?!
                    [FONT="Helvetica"]twitter.com/unset[/FONT]

                    Shitstorm Podcast – Wöchentliches Auskotzen

                    Kommentar


                    • #11
                      Das weiss ich nicht ob man es darf, geht auber auch nicht ohne limit und ohne on

                      LEFT JOIN $tab_content t1 USING(id) t1.update_time <= '$datum_jetzt'

                      Kommentar


                      • #12
                        USING(id) t1.update_time <= '$datum_jetzt'

                        Das ist syntaktisch falsch! MySQL :: MySQL 5.1 Reference Manual :: 12.2.8.1 JOIN Syntax

                        Kommentar


                        • #13
                          Zitat von onemorenerd Beitrag anzeigen
                          USING(id) t1.update_time <= '$datum_jetzt'

                          Das ist syntaktisch falsch! MySQL :: MySQL 5.1 Reference Manual :: 12.2.8.1 JOIN Syntax

                          Das hab ich ihm auch schon gesagt ;D und ich dachte eigentlich das er das DESC LIMIT von alleine drauf kommt ... das es dort unsinn ist.


                          zumal DESC nur im ORDER BY sinn macht.

                          ;D und ein LIMIT eins in einem JOIN kann ich nicht beantworten aber sinn machts auch nur am ende
                          Bitte Beachten.
                          Foren-Regeln
                          Danke

                          Kommentar


                          • #14
                            Es geht auch nicht wenn das limit weg ist!!!!

                            Wie kann ich denn aussuchen dass jeweils nur ein Datensatz (limit), nähmlich der welcher zeitlich zum schluss drin ist (t1.update_time <= '$datum_jetzt') ausgibt?

                            Kommentar


                            • #15
                              Verstehst du die Syntax auf der verlinkten Dokuseite nicht? Dann "übersetze" ich das mal für dein konkretes Problem:

                              SELECT <Spalten> FROM <Tabelle> JOIN <Tabelle> ON <Bedingung> AND <Bedingung>

                              Hier noch mal das was du bisher (falsch) machst:

                              SELECT <Spalten> FROM <Tabelle> JOIN <Tabelle> USING(<Spalte>) <Bedingung>


                              Wenn der Groschen jetzt noch nicht fällt, dann wirf die Query am besten weg und baue sie von Null wieder neu auf - Schritt für Schritt und zwischendurch immer wieder testen.

                              Kommentar

                              Lädt...
                              X