Autor Zpráva
Jackyl
Profil *
Zdravim,

mám tento dotaz do db, který mi má vytáhnout narozeniny v daném měsící, ale např. dnes mi to již tahá narozeniny z března, dá se to nějak upravit? Díky

select *
from `hraci`
where date_format(`datum`,'%m%d') between date_format(curdate(),'%m%d') and date_format(adddate(curdate(),interval 30 day),'%m%d')
ORDER BY datum ASC
	
TomášK
Profil
Jackyl:
Tohle je dost velké zlo - převádíš datum na řetězec a pak porovnáváš řetězce, ve správném řešení by date_format nemělo být. Dobrý přístup je vygenerovat si krajní data intervalu (přesné dny) a zkoumat, jestli je hledané datum mezi nimi. Většinou je jednodušší generovat to na straně aplikace, ale i v MySQL to jde.
Alphard
Profil
where month(now()) = month(date_insert)
Vygenerovánín času v PHP a dosazením místo now() umožní databázi použit cache.
Použití funkce na sloupec je pomalé, ale tady mě nenapadá, jak to sestavit jinak. Když to bude u velké tabulky brzdit, přidejte do databáze samostatný sloupec s měsícem narození a porovnávejte podle něho.

Nebo porovnání krajních hodnot intervalů, viz [#2].
_es
Profil
Alphard:
Použití funkce na sloupec je pomalé, ale tady mě nenapadá, jak to sestavit jinak
Pred zostavením dotazu zistiť maximálny a minimálny rozdiel v dátumoch a tie použiť v dotaze.
Alphard
Profil
_es:
Tak ano, já myslel nějaké jednoduché řešení. Zase z toho nechci dělat kovbojku. Teď jsem where uvedený v [#3] (bez úprav) použít na tabulce s 900 záznamy, výsledek 0.000 s, takže neměřitelný. Pak jsem to zkusil u tabulky s 140000 záznamy a 0.008 s.
Jestli má Jackyl desítky až stovky hráčů, nemusí to vůbec komplikovat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0