Ankündigung

Einklappen
Keine Ankündigung bisher.

Ein Subselect nötigerweise?

Einklappen

Neue Werbung 2019

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

  • Ein Subselect nötigerweise?

    Hallo,
    habe ein Select wo ich ein date Wert umwandeln muss

    Code:
    DATE_FORMAT(start_date, '%Y-%c') as start_y_m,
    DATE_FORMAT(end_date, '%Y-%c') as end_y_m
    nun muss ich ein BETWEEN in der WHERE Bedingung machen:

    Code:
    WHERE '$y_m' BETWEEN start_y_m AND end_y_m
    Das funktioniert bekannterweise ja nicht in einem einzigen Select.

    Nun dachte ich mir so etwas wie eine temp Table oder Subselect.
    Leider finde ich dazu reichlich wenig Beispiele (ist Neuland für mich) anhand dessen ich das verstehen kann, wie ich so etwas realisieren kann.

    Hat jemand von euch Tipps?
    Gruss, Micha

  • #2
    das sollte doch in einer einzigen Abfrage machbarsein.
    zB so:
    Code:
    SELECT
       start_date,
       end_date,
       DATE_FORMAT(start_date, '%Y-%m') as start_y_m,
       DATE_FORMAT(end_date, '%Y-%m') as end_y_m
    FROM
       tabelle
    WHERE
       '$y_m' BETWEEN DATE_FORMAT(start_date, '%Y-%m') AND DATE_FORMAT(end_date, '%Y-%m')
    Man kann aliAS -Bezeichner, die im SELECT-Teil erzeugt werden,
    NICHT im WHERE-Teil verwenden (,weil die dort unbekannst sind.),
    sondern
    man muss in dem WHERE-Teil den Ausduck verwenden, mit dem man diese aliAS-Bezeichner erzeugt.

    UND:
    verwende nicht %c für den Monat, sondern %m (Monat muss in diesem Fall 2-stellig sein!)
    UND:
    formuliere die Variable $y_m auch im Format "2005-01" !

    ~dilemma~

    Kommentar


    • #3
      umpf, morgendummheit

      Man kann manchmal wirklich um drei Ecken denken

      $m ist bei mir eine for Schleife, kann da schlecht ne 0 vorne an stellen.
      Aber das Ergebnis funktioniert wunderbar!!

      Dankeschön!
      Gruss, Micha

      Kommentar


      • #4
        Ich verstehe deine Antwort jetzt zwar nicht, aber bedenke,
        daß:
        ----> 20061 nicht größer als 200510 ist, sondern 20061 kleiner als 200510 ist !
        und:
        ----> 20061 between 200510 and 20062 syntaktisch falsch ist!

        ~dilemma~

        Kommentar


        • #5
          Zitat von tekknotrip
          $m ist bei mir eine for Schleife, kann da schlecht ne 0 vorne an stellen.
          ?

          $i = substr("0$i", -2); // macht aus 5 ein 05

          Kommentar


          • #6
            Zitat von tekknotrip
            $m ist bei mir eine for Schleife, kann da schlecht ne 0 vorne an stellen.
            Du könntest dir auch deine Abfrage recht einfach mit sprintf() zusammenbauen und dort auch direkt angeben, dass der Monat zweistellig sein soll und gegebenenfalls mit 0 aufgefüllt wird:
            PHP-Code:
            <?php
                $sql 
            sprintf("SELECT
                                            start_date,
                                            end_date,
                                            DATE_FORMAT(start_date, '%Y-%m') AS start_y_m,
                                            DATE_FORMAT(end_date, '%Y-%m') AS end_y_m
                                        FROM
                                            tabelle
                                        WHERE
                                            %d-%02d BETWEEN DATE_FORMAT(start_date, '%Y-%m') AND DATE_FORMAT(end_date, '%Y-%m')"
            ,
                                
            $jahr,
                                
            $monat);
            ?>

            Kommentar

            Lädt...
            X