filterproblem

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

  • filterproblem

    hallo gemeinschaft

    folgendes problem

    habe eine tabelle

    id_name_datum1_datum2

    jetzt möchte ich folgendermassen filtern

    in datum1 stehen immer datumsangeben drin in datum2 nur ab und zu

    wie muss die query lauten wenn ich wie folgt filtern will

    ich möchte alle einträge haben, die z.b. zwischen dem 1.1.05 und 31.1.05 sind wobei man zuerst schauen muss, ob in datum2 ein datum steht und das soll mit dem suchintervall verglichen werden, wenn in datum2 kein datum steht, dann soll das suchintervall auf datum1 angewendet werden

  • #2
    Re: filterproblem

    Original geschrieben von jhaustein
    habe eine tabelle
    id_name_datum1_datum2

    ich möchte alle einträge haben, die z.b. zwischen dem 1.1.05 und 31.1.05 sind wobei man zuerst schauen muss, ob in datum2 ein datum steht und das soll mit dem suchintervall verglichen werden, wenn in datum2 kein datum steht, dann soll das suchintervall auf datum1 angewendet werden
    ... WHERE (datum2 BETWEEN $start AND $end) OR (datum1 BETWEEN $start AND $end)

    Kommentar


    • #3
      vielen dank -

      problem ist nur, folgendes

      ich habe z.b. in datum2 31.01.06 stehen und in datum1 31.10.05

      jetzt soll er, wenn ich in der db nach 31.10.05 suche aber diesen datensatz nicht ausgeben, weil ja ein datum in datum2 steht

      also wenn in datum2 nichts steht, dann soll er in datum1 suchen, wenn in dateum2 ein datum steht, dann soll er nur in datum2 suchen

      Kommentar


      • #4
        ... WHERE (datum2 BETWEEN $start AND $end) OR (datum2 = NULL AND (datum1 BETWEEN $start AND $end))

        Kein eigenes Hirn?

        Kommentar


        • #5
          @kein Hirn
          Ich würde nicht mit = NULL arbeiten...
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            sondern?

            Kommentar


            • #7
              So: http://dev.mysql.com/doc/refman/5.0/...with-null.html

              Vorausgesetzt, du hast wirklich NULL drinstehen
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                im mom steht dann bei datum2 0000-00-00 drin

                Kommentar


                • #9
                  Wie wär's dann mit NOT BETWEEN?

                  Entweder datum2 ist BETWEEN deinen 2 Werten
                  oder datum2 ist NICHT BETWEEN deinen 2 Werten und datum1 ist BETWEEN deinen 2 Werten
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    was spricht den gegen die obige query

                    Kommentar


                    • #11
                      Die Tatsache, dass Vergleiche der Art
                      Code:
                      irgendwas = NULL
                      scheiße sind?

                      Steht aber so in dem Link, den ich gepostet habe.
                      Hast du ihn nicht gelesen?
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        doch - bin gerade dabei - meinst du denn, dass ich probleme bekomme,
                        wenn ich es mit 0000-00-00 vergleiche -

                        wie meinst du das mit dem not between

                        Kommentar


                        • #13
                          Mal logisch nachgedacht:
                          In der Doku steht, dass man mit IS NULL und is NOT NULL arbeiten soll, wenn man NULL als Inhalt eines Feldes haben kann.
                          Ich sage dir, dass du nicht mit = NULL arbeiten sollst.
                          Du sagst, dass da gar nicht NULL drinsteht.

                          Warum in aller Welt willst du jetzt noch 0000-00-00 00:00:00 mit NULL vergleichen und dann auch noch falsch?


                          Wie ich das mit NOT BETWEEN meine?
                          So wie ich es geschrieben habe.

                          Setz dich doch mal hin und formuliere deine Bedingungen ganz genau und schreibe sie in deinen nächsten Beitrag.
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Dagegen spricht, wie schon erwähnt, das Konstrukt "= NULL", was allein schon nicht korrekt ist und in Kombination mit deinen Default-Werten in der Spalte natürlich auch nichts bringt.

                            Entweder du änderst die Spaltendefinition, so daß NULL erlaubt sind (und die Query gemäß dem schon servierten Link) oder du vergleichst mit dem Default-Wert.
                            Die Idee mit NOT BETWEEN ist wahrscheinlich langsamer, denn da wird gerechnet und verglichen. MySQLs Optimizer sieht sicherlich nicht, dass hier genau das Gegenteil verlangt wird und rechnet tatsächlich.

                            Kommentar


                            • #15
                              meine bedingung

                              ... WHERE (datum2 BETWEEN $start AND $end) OR (datum2 = 0000-00-00 AND (datum1 BETWEEN $start AND $end))

                              kann ich doch so nehmen

                              Kommentar

                              Lädt...
                              X