muenzchen: Ist LIKE zu aufwändig?

Hallo,

ich habe einen PHP Kalender in dem Geburtstage angezeigt werden. Die Geburtstage sind im DATE Format in einer MySQL Datenbank gespeichert.
Ich lese die Geburstage für jeden Monat per LIKE aus, also zb.: ...WHERE birthday LIKE '%-04-16'

Dieser Kalender wird von vielen Benutzern oft aufgerufen und es stehen auch viele Geburtstage darin. Ist die Abfrage per LIKE dafür ok, oder sollte man besser was anderes nehmen weil vielleicht lange braucht?
Falls zweiteres der Fall ist, bräuchte ich ein paar Anregungen, da mir spontan keine andere Möglichkeit einfällt.

MfG, muenzchen

  1. hi,

    Ich lese die Geburstage für jeden Monat per LIKE aus, also zb.: ...WHERE birthday LIKE '%-04-16'

    LIKE halte ich hier in der tat für unperformant.

    bräuchte ich ein paar Anregungen, da mir spontan keine andere Möglichkeit einfällt.

    WHERE MONTH(birthday) = 4 AND DAY(birthday) = 16

    gruss,
    wahsaga

    1. Hallo,

      diese Funktionen wären das was ich suche, allerdings kann ich die in meine MySQL Doku nicht finden. Gibts die erst ab 4.x?

      MfG, muenzchen

      1. Hallo muenzchen,

        diese Funktionen wären das was ich suche, allerdings kann ich die in meine MySQL Doku nicht finden.

        und welche ist das?

        Gibts die erst ab 4.x?

        ich weiß es nicht (auch wenn ich eher glaube dass dem nicht so ist) - aber warum probierst du es nicht einfach mal aus?

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hallo,

          und welche ist das?

          noch für MySQL 3.x, eine der letzten jedenfalls

          ich weiß es nicht (auch wenn ich eher glaube dass dem nicht so ist) - aber warum probierst du es nicht einfach mal aus?

          habe ich - unter MySQL 4.0.15 - gibt nur eine Fehlermeldung. Ich kann auch online in der Doku nix finden und auch über Google nicht.
          Würde mich jetzt schon interessieren wo diese Funktionen her sind, falls sie existieren.

          MfG, muenzchen

          1. Hallo muenzchen,

            ich weiß es nicht (auch wenn ich eher glaube dass dem nicht so ist) - aber warum probierst du es nicht einfach mal aus?
            habe ich - unter MySQL 4.0.15 - gibt nur eine Fehlermeldung.

            Welche Fehlermeldung? wie sieht der Query aus?

            Ich kann auch online in der Doku nix finden und auch über Google nicht.

            http://www.mysql.de/doc/de/Date_and_time_functions.html#IDX1234

            Grüße aus Nürnberg
            Tobias

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
            1. Hallo,

              Cool, gibts wirklich. ABer jetzt verstehe ich auch warums nicht klappen kann, denn ich kann doch nicht abfragen mit ...WHERE DAY(birthday) = 4

              Kann MySQL ja nicht kennen, wenns nirgendwo definiert wurde, also muss ich mit LIKE arbeiten.

              MfG, muenzchen

              1. Hallo,

                ...also muss ich mit LIKE arbeiten.

                öh...???

                auf einmal doch wieder?

                Gruß, Andreas

                --
                <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
                http://was-ist-das.andreas-lindig.de
                1. Hallo,

                  Naja, was sonst?

                  Dieses Query kann ja nicht funktionieren:

                  SELECT birthday FROM db_birthdays WHERE DAY(birthday) = 4

                  Wird wohl schwer :)

                  MfG, muenzchen

                  1. SELECT birthday FROM db_birthdays WHERE DAY(birthday) = 4

                    "DAY()" ist auch die falsche Funktion - hat Tobias ja schon geschrieben. Du kannst auch "date_format()" nehmen. Ist sehr variabel.

                    select birthday
                    from db_birthdays
                    where date_format(birthday, '%c') = 4

                    Gruß, Andreas

                    --
                    <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
                    http://was-ist-das.andreas-lindig.de
                    1. Hallo,

                      Hm, das funktioniert wirklich, danke :)

                      MfG, muenzchen

                      1. Du könntest natürlich auch Jahr, Monat, Tag usw. in getrennten Spalten ablegen und diese dann mit einem Fulltext-Index vesehen. Dann ist es wirklich schnell.

                        Gruß, Andreas

                        --
                        <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
                        http://was-ist-das.andreas-lindig.de
                        1. Hallo,

                          braucht aber durch die Indizes auch jede Menge speicher. Ich bleibe so wies jetzt ist, das reicht schon ;)
                          Da ich sowieso noch auf einem Server arbeiten uss, der jede Stunde lahmer wird, sind die Skripte eh blitzschnell, wenn sie dort schon halbwegs schnell laufen <0.2 sec. :)

                          MfG, muenzchen

              2. Hallo muenzchen,

                ABer jetzt verstehe ich auch warums nicht klappen kann, denn ich kann doch nicht abfragen mit ...WHERE DAY(birthday) = 4

                ich hätte beide Funktionen suchen sollen - die Funktion DAY gibt es nämlich nicht, sondern nur die Funktion DAYOFMONTH (->http://www.mysql.de/doc/de/Date_and_time_functions.html#IDX1232) :-)

                Grüße aus Nürnberg
                Tobias

                --
                Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                1. hi,

                  ich hätte beide Funktionen suchen sollen - die Funktion DAY gibt es nämlich nicht, sondern nur die Funktion DAYOFMONTH (->http://www.mysql.de/doc/de/Date_and_time_functions.html#IDX1232) :-)

                  laut http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html gibt es DAY sehr wohl - als alias für DAYOFMONTH().

                  allerdings habe ich dabei wohl den hinweis "It is available as of MySQL 4.1.1." übersehen :-)

                  und auf grund persönlicher vorlieben habe ich dann in meinem beispiel lieber zur kurzschreibweise DAY gegriffen ...

                  gruss,
                  wahsaga

                  1. Hallo wahsaga,

                    die Funktion DAY gibt es nämlich nicht, sondern nur die Funktion DAYOFMONTH (->http://www.mysql.de/doc/de/Date_and_time_functions.html#IDX1232) :-)
                    laut http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html#IDX1365 gibt es DAY sehr wohl -

                    Dann ist die englische Doku bei mysql wohl ebenfalls (bei php ist das ja auch so) aktueller als die deutsche :-)

                    Grüße aus Nürnberg
                    Tobias

                    ps: ich habe mir erlaubt ein deinen Link noch einen Anker einzubauen

                    --
                    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  2. Sup!

    Da versuchst Du's am besten auch noch mit LIKE '__-04-16', denn das spart sicher mindestens einen Durchlauf durch eine Schleife, und vielleicht gibt's auch noch ein paar Stringfunktionen, die man auf das Datum hetzen kann.
    Dann benchmarkst Du alle Moeglichkeiten in einem aufwendigen (Es lebe die alte Rechtschreibung!) Test, und dann weisst Du bescheid. Alles klar?

    Gruesse,

    Bio

    --
    Und er laechelt, denn er weiss: Das Boese siegt immer!