Ist LIKE zu aufwändig?
muenzchen
- datenbank
0 wahsaga0 muenzchen0 Tobias Kloth0 muenzchen0 Tobias Kloth0 muenzchen0 Andreas-Lindig0 Tobias Kloth0 wahsaga
0 Bio
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
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
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
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
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
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
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
Hallo,
...also muss ich mit LIKE arbeiten.
öh...???
auf einmal doch wieder?
Gruß, Andreas
Hallo,
Naja, was sonst?
Dieses Query kann ja nicht funktionieren:
SELECT birthday FROM db_birthdays WHERE DAY(birthday) = 4
Wird wohl schwer :)
MfG, muenzchen
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
Hallo,
Hm, das funktioniert wirklich, danke :)
MfG, muenzchen
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
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
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
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
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
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