Ankündigung

Einklappen
Keine Ankündigung bisher.

Datum Abfrage

Einklappen

Neue Werbung 2019

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

  • Datum Abfrage

    Moin,
    in meine DB habe ich eine Tabelle, wo ein Zeitraum mit VON und BIS existiert.

    Code:
    name | von | bis
    
    Test | 2014-07-05 00:00:00 | 2014-07-18 00:00:00
    Ich möchte jetzt eine Abfrage per Ajax starten, im Formular trage ich folgendes ein:
    von: 2014-07-03
    bis: 2014-07-09

    Nun möchte ich prüfen, ob es in diesen Zeitraum ein Datensatz gibt.
    Im diesen Fall würde ich also ein Datensatz bekommen

    PHP-Code:
    $von 2014-07-03;
    $bis 2014-07-09;

    $sql ="
    SELECT * FROM tb_anfragen
    WHERE 
              von >= '"
    .$von."'
    AND 
              von <= '"
    .$bis."'
    AND
              bis <= '"
    .$bis."'
    AND
              bis >= '"
    .$von."'
    "

    Diese Funktion funktioniert auch nicht, da logischer Fehler wäre xD
    Vllt gibt es auch SQL Befehle für sowas, die ich aber nicht kenne^^

  • #2
    where von between '2000-01-01' and '2014-07-04' or bis between '2000-01-01' and '2014-07-04'

    Kommentar


    • #3
      Wie genau soll die Logik denn sein? Du hast insgesamt 4 Daten, die du verknüpfen willst. Wie genau soll das klappen?

      Muss das Datum komplett matchen? Nur der Anfang? Nur das Ende? Muss die Dauer Anfang oder Ende überschneiden? Kann sie innerhalb des Tabellen-Datums sein? Oder wenn sie das Tabellen-Datum komplett einschließt?

      Erstmal solltest du exakt definieren, was du erreichen willst. Dann kann man sich Gedanken um den Query machen.
      [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

      Kommentar


      • #4
        Ich möchte, das MySQL mir jeglichen Datensatz wiedergibt, der zwischen diesen Zeitraum steckt.

        Kommentar


        • #5
          Dann würde in deinem Beispiel nichts zurückkommen. Denn der Input

          [2014-07-03 bis 2014-07-09]

          ist nicht komplett in

          [2014-07-05 bis 2014-07-18]

          enthalten. Letzteres fängt später an. Also ist es nicht komplett enthalten, ergo: Kein Ergebnis.
          [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

          Kommentar


          • #6
            Sobald $von oder $bis zwischen ein Zeitraum von i.ein Datensatz ist, dann soll er mir true geben.

            Kommentar


            • #7
              Code:
              SELECT * FROM table WHERE (von => $von AND bis <= $von) OR (von => $bis AND bis <= $bis)
              Hoffe ich habe mich nicht vertippt, ist ungetestet. Viel Sinn macht die Anfrage für mich aber nicht.

              Kommentar


              • #8
                Zitat von Jumper93 Beitrag anzeigen
                Sobald $von oder $bis zwischen ein Zeitraum von i.ein Datensatz ist, dann soll er mir true geben.
                Code:
                [...] WHERE
                $von BETWEEN von AND bis
                OR
                $bis BETWEEN von AND bis
                [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

                Kommentar


                • #9
                  BETWEEN hat mir nicht immer das gewünschte Ergebnis gebracht, auch durch das verändern der Daten (Datum 1 und 2).

                  Hab das jetzt so gemacht, ist zwar nicht gerade die beste Lösung, funktioniert aber

                  PHP-Code:
                  $anreise strtotime($anreise);
                             
                  $abreise strtotime($abreise);
                             
                             
                  $sql "
                                 SELECT *
                                 FROM datum
                             "
                  ;
                             
                             
                  $res mysql_query($sql,$this->dbh) OR die(mysql_error());  
                            while (
                  $row mysql_fetch_assoc($res)) {
                               
                  $ret[] = $row;
                            }
                            
                            if(
                  $ret == true) {
                                foreach (
                  $ret as $sql_date)
                                {
                                    
                  $date_anreise strtotime($sql_date["anreise"]);
                                    
                  $date_abreise strtotime($sql_date["abreise"]);
                                
                                    if(
                                        ( 
                  $date_anreise $anreise && $date_anreise $b ) OR
                                        ( 
                  $date_abreise $anreise && $date_abreise $b ) OR
                                        ( 
                  $anreise $date_anreise && $anreise $date_abreise ) OR
                                        ( 
                  $abreise $date_anreise && $abreise $date_abreise ) OR
                                        ( 
                  $anreise <= $date_anreise && $abreise >= $date_abreise )
                                    )
                                    {
                                        return 
                  true;
                                        exit;
                                    }
                                }
                            }else {
                                return 
                  false;
                            } 

                  Kommentar

                  Lädt...
                  X