Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] DATE_FORMAT(datum,'%M %Y') in WHERE Klausel

Einklappen

Neue Werbung 2019

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

  • [Erledigt] DATE_FORMAT(datum,'%M %Y') in WHERE Klausel

    Hallo,

    sitze mal wieder stundenlang vor einem Problem, dass ich einfach nicht gelöst bekomme.

    Folgendes Problem:
    Ich habe zunächst mal eine Dropdown-Liste, wo man sich einen Monat und ein Jahr aussuchen kann und dann soll das ganze einem theoretisch nach dem Druck auf einen Button nur noch Beiträge aus eben diesem Monat und Jahr anzeigen.

    Die Dropdown-Liste erstelle ich automatisch so:

    PHP-Code:
                    <form action=\"index.php\" method=\"get\">
                        <select name=\"monat\">
                            <option value=\"0\" selected>Einen Monat ausw&auml;hlen</option>"
    ;
                            
    $dbanfrage2 "SELECT DISTINCT DATE_FORMAT(datum,'%M %Y') AS datum2 from $tabelle ORDER BY datum DESC";
                            
    $dbanfrage3 "SET lc_time_names = 'de_DE'";
                            
    $result3 mysql_db_query ($dbname$dbanfrage3$dbverbindung);
                            
    $result2 mysql_db_query ($dbname$dbanfrage2$dbverbindung);
                            while (
    $ausgabe mysql_fetch_array ($result2))
                            {
                                print
    "<option value=\"$ausgabe[datum2]\">$ausgabe[datum2]</option>";
                            }
                            print
    "
                        </select>
                        <input type=\"submit\" name=\"formaction\" value=\"Absenden\" />
                    </form> 
    Daraufhin übergibt der das ganze dann an die index.php, die ruft die archiv.php auf, die das ganze dann weiter verarbeiten soll. Bis dahin funktionierts.

    Dort versuche ich es dann folgendermaßen mit den Werten in der Datenbank zu vergleichen. Die Datumsanzeige liegt übrigens im date-Format vor, also z.B. 2010-11-13.

    PHP-Code:
    $archivmonat $_GET["monat"];
        
    $dbanfrage3 "SET lc_time_names = 'de_DE'";
        
    $result3 mysql_db_query ($dbname$dbanfrage3$dbverbindung);
        
    $dbanfrage "SELECT *, DATE_FORMAT(datum, '%M %Y') AS datum2 from $tabelle ORDER BY id DESC WHERE datum2 = '$archivmonat'";
        
    $result mysql_db_query ($dbname$dbanfrage$dbverbindung);

     while (
    $ausgabe mysql_fetch_array ($result))
        {
        } 
    Da gibt er mir dann immer die Ausgabe:
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in ...

    Was ja ganz einfach bedeutet, dass er keine Ergebnisse findet, die mit der WHERE Klausel übereinstimmen. Wo ist also mein Fehler?

    Vielen Dank für jede Hilfe, ich schlage mir sonst noch die ganze Nacht um die Ohren.

  • #2
    Zitat von Marubas Beitrag anzeigen
    Da gibt er mir dann immer die Ausgabe:
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in ...
    Falsch.
    Zitat von mysql_query - Return Values
    For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
    Das bedeutet wohl, dass dein SQL-Query einen Fehler aufweist.

    Was das für ein Fehler ist, kannst du herausfinden, indem du den Query und den MySQL-Fehlertext ausgibst ([MAN]mysql_error[/MAN])

    Kommentar


    • #3
      Erst die WHERE-Anweisung und dann die ORDER-Anweisung!

      Kommentar


      • #4
        so wie Nullraff sagt - obendrein kriegst du aber noch ein Problem - da datum2 im Select erst "AM ENDE" erstellt wird, kannst du diesen Alias-Namen nicht im Where / ORDER usw verwenden. du müsstest stattdessen entweder den Vergleich anhand von datum (die ursprüngliche Spalte) machen - oder im Where-Teil nochmal den Teil aufführen, der zum Alias benutzt wird

        Kommentar


        • #5
          Zitat von eagle275 Beitrag anzeigen
          so wie Nullraff sagt - obendrein kriegst du aber noch ein Problem - da datum2 im Select erst "AM ENDE" erstellt wird, kannst du diesen Alias-Namen nicht im Where / ORDER usw verwenden. du müsstest stattdessen entweder den Vergleich anhand von datum (die ursprüngliche Spalte) machen - oder im Where-Teil nochmal den Teil aufführen, der zum Alias benutzt wird
          Oder HAVING benutzen. Aber eigentlich brauchst du DATE_FORMAT() im SELECT ja garnicht, nur im WHERE-Teil. Das Datum sollte so oder so im Rohformat ausgeliefert werden, so dass du flexibel in der Ausgabe bleibst.

          Kommentar


          • #6
            Vielen Dank.

            Also, falls mal irgendwer mit dem gleichen Problem hierauf trifft

            PHP-Code:
            $dbanfrage "SELECT * from $tabelle WHERE DATE_FORMAT(datum,'%M %Y') = '$archivmonat' ORDER BY id DESC"
            und schon funktioniert alles. Nochmal vielen Dank. Werde in Zukunft mal dran denken mir auch die SQL-Fehler anzeigen zu lassen...

            Kommentar

            Lädt...
            X