Ankündigung

Einklappen
Keine Ankündigung bisher.

Abfrage zwischen 2 Daten mit Platzhalter

Einklappen

Neue Werbung 2019

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

  • Abfrage zwischen 2 Daten mit Platzhalter

    PHP-Code:
    <?php
     
    require("../_private/dbconnect.php");
     
    $netz $_POST['netz'];
    $dienst $_POST['dienst'];
    $art $_POST['art'];
    $jahrvon $_POST['jahrvon'];
    $jahrbis $_POST['jahrbis'];
    $monatvon $_POST['monatvon']; 
    $monatbis $_POST['monatbis']; 
     
    if (
    $netz==0){$netz='%';} 
    if (
    $dienst==0){$dienst='%';} 
    if (
    $art==0){$art='%';} 
    if (
    $jahr==0){$jahr='%';} 
     
    if(
    $jahr != AND $monatvon != AND $monatbis != 0)

    $sql "SELECT * FROM main
    WHERE
    netz_id LIKE '
    $netz' AND
    dienst_id LIKE '
    $dienst' AND
    art_id LIKE '
    $art' AND
    year(datum) LIKE '
    $jahr' AND
    month(datum) BETWEEN '
    $monatvon' AND '$monatbis'";

     
    else 

    $sql "SELECT * FROM main
    WHERE 
    netz_id LIKE '
    $netz' AND
    dienst_id LIKE '
    $dienst' AND
    art_id LIKE '
    $art' AND
    year(datum) LIKE '
    $jahr'";
    }
     
    $res mysql_query($sql);
    $i 1;
    $j 0;
    $array = array();
     
    while (
    $row mysql_fetch_array($res,MYSQL_ASSOC))
    {
    $text $row['sa_nummer'];
    $x $row['breite'];
    $y $row['laenge'];
    $netz $row['netz_id'];
    $art $row['art_id'];
     
    if (
    $netz == AND $art == 2// GSM Störung
    {
    $col 1// Rot
    }
    elseif (
    $netz == AND $art == 1// GSM Versorgungsanfrage
    {
    $col 3// Blau
    }
    elseif (
    $netz == AND $art == 2// UMTS Störung
    {
    $col 8// Magenta
    }
    elseif (
    $netz == AND $art == 1// UMTS Versorgungsanfrage
    {
    $col 9// Türkis
    }
    else 
    // Alles andere
    {
    $col 2// Grün
    }
     
    $symbol "[Symbol $i]
    Typ=2
    Group=1
    Col=
    $col
    Area=2
    Zoom=1
    Size=121
    Font=1
    Dir=100
    XKoord=
    $x
    YKoord=
    $y
    Text=
    $text";
     
    $array[$j] = $symbol;
     
    $i ++;
    $j ++;
    }
    $anzahl $j;
    $anhang ="
    [Overlay]
    Symbols=
    $anzahl
    [MapLage]
    MapName=Übersichtskarte NRW (TÜK200)
    DimmFc=80
    ZoomFc=100
    CenterLat=50.9418410
    CenterLong=6.9258104
    RefOn=0"
    ;
     
    $ausgabe implode ("\r\n" $array);
    $ergebnis $ausgabe.=$anhang;
     
     
    header('Content-type: text/ovl');
    header('Content-Disposition: attachment; filename="Serviceauftraege.ovl"');
    header('Pragma: no-cashe');
    header('Expires: 0');
     
    echo 
    $ergebnis;
     
    ?>

    Hallo zusammen,

    folgendes Problem.
    Der User soll für den Export des Overlays ein paar Parameter festlegen. Alles funktioniert soweit. Bisher war es jedoch so, das mann ein Jahr ausgewählt hat und wenn man noch wollte, einen Zeitraum von Monaten innerhalb dieses Jahres. Nun ja, ich möchte gerne das ganze erweitern. Man soll einen beliebigen Zeitraum festlegen können. Bsp. alle Datensätze von März 2008 bis Juni 2009 oder so. Meine Frage ist nun, wie bekomme ich das hin?

    SELECT * FROM main WHERE datum BETWEEN "2007-01-01" AND "2009-01-01"
    Das funktioniert, sobald ich jedoch die Tage durch % austausche, bekomme ich null Ergebnisse zurück.
    Was mache ich falsch?


    MfG
    MasterMind

  • #2
    Warum willst du die denn mit % ersetzen?

    Kommentar


    • #3
      Das funktioniert, sobald ich jedoch die Tage durch % austausche, bekomme ich null Ergebnisse zurück.
      Was mache ich falsch?
      Naja, versetz Dich mal in die Lage des Rechners. Wie soll er denn etwas zwischen unbekannten Daten ermitteln.

      Nutz doch einfach 01 vorne und 31 hinten.

      Kommentar


      • #4
        Ich hatte gehoft, dass es eine fertige Funktion dafür gibt. Der Benutzer soll keinen Tag, sondern nur einen Monat und das Jahr jeweils auswählen. Und es gibt zwar eine month und year funktion, aber damit habe ich keine sinnvolle Konstruktion hinbekommen.



        Wenn ich einfach den Wert auf 31 setze, gibts dann keine Probleme wenn es um einen Monat geht, der keinen 31sten hat, wie z.b. der Februar?

        Kommentar


        • #5
          Sinnvoll ist sowieso den 1. des Folgemonats zu verwenden.

          Kommentar


          • #6
            Sinnvoll ist sowieso den 1. des Folgemonats zu verwenden.
            Was auch einfach durch Y-m im BETWEEN abgekürzt werden kann.

            Es reicht also für JULI/AUGUST ein
            Code:
            BETWEEN '2008-07' AND '2008-09'

            Kommentar


            • #7
              Ah, ok. Auch inklusive erstem und letztem DS. Und ist das wirklich Juli/August, oder nur Juli?

              Kommentar


              • #8
                Zitat von nikosch Beitrag anzeigen
                Ah, ok. Auch inklusive erstem und letztem DS. Und ist das wirklich Juli/August, oder nur Juli?
                Habs getestet und meine Aussage für richtig befunden. Aber ich glaub du meintest sowieso August oder? Aber Nein, bei

                Code:
                BETWEEN '2008-07' AND '2008-09'
                geht's vom 2008-07-01 00:00:00 bis 2008-08-31 23:59:59. Nur halt ohne Zeitangaben, die hab ich nur zum Verständnis dazu geschrieben, macht auch Sinn so.

                Kommentar


                • #9
                  Nö. 07-Juli. War mir nicht sicher, ob fehlende Tage abhängig vom BETWEEN aufgelöst werden also '2008-09' nach '2008-09-30' oder nach '2008-09-01'.

                  [edit]
                  Und ich merke gerade, dass ich die 08 von 2008 im Kopf hatte. Alles klar. yyyy-mm wird also immer zu yyyy-mm-01. Korrekt?

                  Kommentar


                  • #10
                    Also die Konstruktion

                    Code:
                    SELECT * FROM main WHERE datum BETWEEN '2008-01' AND '2008-12'
                    bringt bei mir keine Ergebnisse zurück. Es gibt zwar auch keine Fehlermeldung, aber ebend null Ergebnisse. In der Tabelle stehen jedoch 2 Datensätze mit einem Datum aus dem Jahre 2008. Sobald ich den Tag dazu schreibe, funktioniert das Ganze wieder.


                    Leider kann man auch nicht automatisch den ersten des darauf folgendnen Monats nehmen, da dieser dann mit benutzt wird. Wenn ich also
                    Code:
                    SELECT * FROM main WHERE datum BETWEEN '2008-01-21' AND '2008-12-30'
                    schreibe, werden alle Datensätze ausgegeben, die genau an den Tagen und dazwischen liegen. Wenn ich also automatisch auf den nächsten Monat springe, würden auch die Datensätze des 1. des darauf folgenden Monats mit ausgegeben.

                    Kommentar


                    • #11
                      Dann machste halt
                      WHERE datum > ... AND datum < ... . Mit Datumsfeldern kann man sogar rechnen.

                      Kommentar


                      • #12
                        Oder du versuchst es mit YEAR() und MONTH().

                        Kommentar


                        • #13
                          Also ich habe das (wie gesagt!!!) gestestet und entweder es liegen so große Unterschiede zwischen unseren MySQL-Versionen (habs auf 5.0.32 getestet) oder dein Feld datum hat nicht den Datentyp DATE

                          Kommentar

                          Lädt...
                          X