Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Abfrage mit Year und Month ?

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

  • SQL Abfrage mit Year und Month ?

    Hallo,

    ich habe ein Problem mit meiner SQL Abfrage. Ich möchte alle Datensätze auslesen aus dem aktuellen Monat und dem aktuellem Jahr. In der Datenbank ist im dem Feld veroeffentlichung das dateum im Format 02.12.2011 drin. Meine Abfrage nur mit dem Monat funktioniert:

    PHP-Code:
    SELECT DISTINCT p.products_id,
                                  
    pd.products_name,
                                  
    pd.products_description,
                                  
    p.products_date_added,
                                  
    p.filme_veroeffentlichung,
                                  
    pd.products_url,
                                  
    p.products_image
                            from 
    ".TABLE_PRODUCTS." p".TABLE_PRODUCTS_DESCRIPTION." pd
                            WHERE p
    .products_status '1'
                            
    AND   p.products_id pd.products_id
                            
    AND MONTH(p.filme_veroeffentlichung) = MONTH(NOW())
                            
    ORDER BY p.filme_veroeffentlichung DESC"; 
    Aber dadurch das, dass Jahr fehlt gibt er alle Datensätze aus die zum beispiel im Dezember 2010,2011 sind. Nun möchte ich aber nur alle Datensätze aus dem aktuellem Jahr. Und wenn ich das Jahr mit einfüge ist die Abfrage leer:

    PHP-Code:
    SELECT DISTINCT p.products_id,
                                  
    pd.products_name,
                                  
    pd.products_description,
                                  
    p.products_date_added,
                                  
    p.filme_veroeffentlichung,
                                  
    pd.products_url,
                                  
    p.products_image
                            from 
    ".TABLE_PRODUCTS." p".TABLE_PRODUCTS_DESCRIPTION." pd
                            WHERE p
    .products_status '1'
                            
    AND   p.products_id pd.products_id
                            
    AND MONTH(p.filme_veroeffentlichung) = MONTH(NOW())
                            AND 
    YEAR(p.filme_veroeffentlichung) = YEAR(NOW())
                            
    ORDER BY p.filme_veroeffentlichung DESC"; 
    Was mache ich Falsch


  • #2
    Code:
    SELECT dingenskirchen 
    FROM da 
       WHERE 
          dings = 1
             AND 
          da.movie_release BETWEEN 
             CONCAT_WS('-', 
                YEAR(NOW()), 
                MONTH(NOW()), 
                '01'
             ) 
                AND 
             LAST_DAY(NOW()) 
       ORDER BY dingens DESC
    Datum-Ranges als Grenzen ist irgendwo Logischer als mit Einzelnen Zahlen rumzueiern.
    PHP.de Gitter.im Chat - Meine öffentlichen Bookmarks ← Ich habe dir geholfen ? Beschenk mich.

    Kommentar


    • #3
      Hey tr0y,

      vielen Dank für deine schnelle Antwort. Ich habe es nun Probiert aber er gibt nun alle Datensätze aus.

      Mein Datum in der DB ist ja in dem Format 01.12.2011 ... also muss CONCAT ja dann bei mir so aussehen:

      PHP-Code:
      AND p.filme_veroeffentlichung BETWEEN 
                   CONCAT_WS
      ('.',NULL,MONTH(NOW()),YEAR(NOW())
                      )
                   AND 
      LAST_DAY(NOW()) 
      Aber wie gesagt er gibt dann alle Datensätze aus.

      Kommentar


      • #4
        - das filmchen-geschmisse-tag feld MUSS vom typ DateTime sein, ansonsten musst du es live im Query dazu machen ( siehe unten )
        - MySQL nutzt Standard-Formate für DateTime ( YYYY-MM-DD HH:II:SS )
        - du hast nicht verstanden worums beim BETWEEN geht: du sagst der datenbank: gib mir alles zwischen Datum x und datum y, was soll da bitte die datenbank mit dem 0ten September 1992 anfangen ? Richtig, genau nix, invalides Datum.

        Für den fall das du kein DateTime Typ hast hilft auch:

        Code:
        AND CAST( p.file_veroeffentlichung AS DATETIME ) 
           BETWEEN CONCAT_WS('-', YEAR(NOW()), MONTH(NOW()), '01') AND LAST_DAY(NOW())
        Da sollte man sich aber weit von weg bewegen, wenn das ganze auf ziemlich ausgelasteten Seiten was werden soll, dort ist die angleichung der Datenfelder entsprechend der rethorischen Frage "Hi, und ? is der Rest deiner Datenbank auch vernünftig normalisiert ?"
        PHP.de Gitter.im Chat - Meine öffentlichen Bookmarks ← Ich habe dir geholfen ? Beschenk mich.

        Kommentar

        Lädt...
        X