Autor Zpráva
Zacatecnik
Profil *
Ahoj,

mám takový triviální dotaz. Jakým způsobem z mysql databáze vybrat data s podmínkou "date > NOW()".

Když kouknu do db, tak datum je uloženo takto: (varchar) 1337724000 (ukládá se pomocí $datum_ktere_ulozim_do_db = strtotime('03. 06. 2012')). Lze i s takoto uloženým datem pracavat? Jak by měla vypadat podmínka, která by z db vytáhla jen ty položky které mají datum rovno nebo větší dnešnímu dni (hodiny a minuty nezohledňujeme)? Nějak se mi to nedaří, nic se mi nevrátí když použiju date > NOW()

(a nebo musím databázi upravit tak, abych čas ukládal jako datetime?)


Děkuji za reakce
Joker
Profil
Zacatecnik:
Lze i s takoto uloženým datem pracavat?
Špatně. Lepší by bylo to konvertovat na normální uložení data (DATETIME)
Tori
Profil
Zacatecnik:
V PHP třeba takhle: $sql = "SELECT ... WHERE `date` BETWEEN ".strtotime('00:00:00')." AND ".time();

musím databázi upravit tak, abych čas ukládal jako datetime?
Snadněji by se s těmi daty pak pracovalo, když budete chtít např. odečíst/přičíst interval, získat číslo měsíce/dne/dne v týdnu, apod.
Majkl578
Profil
Správným formátem pro uložení datumu (samotného, bez času) je typ DATE s formátem YYYY-MM-DD. Pokud máš možnost, bylo by asi vhodné zvážit změnu. V takovém případě by platilo řešení z tématu ze včera.

Pokud bys to změnit nemohl, pak by to přímo na úrovni SQL šlo takto:
SELECT foo, bar FROM sometable WHERE FROM_UNIXTIME(foo) > CURDATE()
Alphard
Profil
SELECT foo, bar FROM sometable WHERE FROM_UNIXTIME(foo) > CURDATE()
Dovolím si upozornit, že pro velké tabulky by bylo lepší nevolat funkci na sloupec, ale porovnávat jednou dosazené číslo.
Zacatecnik
Profil *
ok, dekuju vam vsem. Nejlepsi asi bude venovat trochu case tomu, abych zmenil typ na DATE. Jeste jednou diky

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: