Autor Zpráva
kenny46
Profil *
Zdravím, chtěl bych se zeptat, jak udělat, aby se na stránce zobrazoval další zápas mužstva. Něco podobného jako je to tady : http://www.skjankov.cz/ v pravém sloupečku. Díky
radvis
Profil *
Vezmeš aktuální čas a potom SQL dotazem zjístíš kdy je nejbližší zápasa vypíšeš ho.
h.r.v
Profil *
a jak by mel ten dotaz vypadat?
Mastodont
Profil
Asi takto: SELECT [sloupce] FROM zápasy WHERE čas > aktuální_čas ORDER BY čas LIMIT 1
h.r.v
Profil *
mam to asi takhle SELECT*, DATE_FORMAT(datum, '%e.%m.%Y') AS datum FROM {tabulka} WHERE datum >= now() ORDER BY datum LIMIT 1; ale funguje mi to jen kdyz vymazu tu zmenu formatu data, proste to now() je ve formatu RRRR-MM-DD a ja bych ho potreboval prevest na stejny format, jako to datum, nevite nekdo jak?
AM_
Profil
jakého datového typu je sloupec "datum" ? nevidím důvod, proč pro vnitřní porovnání data ve sloupci datum a now() by bylo potřeba cokoliv formátovat
radvis
Profil *
mas to ukladat do db time() (to ti uloží nějaké 145689) a pak das jen where cas >= ".time()."
AM_
Profil
tak jak psal radvis se to přesně nedělá, od toho je datový typ DATE/DATETIME/TIMESTAMP.
radvis
Profil *
V čem je to špatně?
h.r.v
Profil *
datum je datoveho typu DATE
AM_
Profil
technicky to samozřejmě funguje, ale věci se mají používat k tomu, k čemu jsou určené. Jednou mám v databázi údaj o datumu, tak jej budu ukládat jako datum a ne jako číslo, DB engine na něm pak umí spoustu hezkých operací, které samozřejmě nad integerem nemají smysl. Používat pouze INT a VARCHAR je přístup začátečníků, kteří neví, k čemu/že vůbec další datové typy v SQL jsou.

h.r.v:
pak to musí fungovat... v čem je problém? takto ti to vypíše všechny řádky, kde je datum z budoucnosti, a zformátuje to datum do tvaru den.měsíc.rok. nebo ne?
radvis
Profil *
Já vím k čemu to tam je, ale příjde mi to tak jednodužší.
h.r.v
Profil *
právě že mi to, porovnává zformátovaný datum ze sloupce "datum" s nezformatovanym now(), zkousel jsem mazat ten prevod "datumu" a pak to slapalo, jak melo, ale vypsalo mi to datum ve tvaru RRRR-MM-DD, ale ja bych to potreboval naopak
AM_
Profil
h.r.v:
porovnává zformátovaný datum ze sloupce "datum" s nezformatovanym now()
podle čeho tak soudíš?

SELECT
DATE_FORMAT(datum, '%e.%m.%Y') //toto udává, co z vybraných řádků vypsat; to, že tady výstup nějak formátuješ, určitě nijak neovlivňuje porovnání v podmínce WHERE 
AS datum FROM {tabulka}
WHERE datum >= now() //toto udává podmínku, jaké řádky vybrat
ORDER BY datum LIMIT 1;


chyba tedy bude jinde, porovnání v podmínce není ovlivněno výčtem sloupců za SELECT.



radvis:
ano, pro rychloprogramátory je to jednodušší, kvalitně odvedená práce používá správné datové typy.
h.r.v
Profil *
tak datum to sice porovnanava, ale jenom podle dne, na mesice to nebere ohled, takze treba 2.12. 2010 jedrive nez 28.6. 2010, protoze dvojka je nizsi cislo nez 28
AM_
Profil
mě toto porovnání funguje, now() a sloupec typu DATE se porovnává korektně.

h.r.v:
takze treba 2.12. 2010 jedrive nez 28.6. 2010
které z těchto bylo now()? já jen, že ani jedno z toho ještě nenastalo...
h.r.v
Profil *
now() nebylo ani jedno, ale to porovnani tam je proto, abych se mi vypsalo nejblizsi budouci datum, ale jelikoz to bere podle dne, tak se vypise 2.12.2010, ktere mam ulozene v databazy a ne 28.6.2010
Kajman_
Profil *
Problém bude v aliasu stejně nazvaném jako původní sloupec. Where správně omezí na datumy z budoucnosti, ale order by seřadí nově získané datum jako stringy. Takže by mělo pomoci pojmenovat jiným aliasem, nebo použít syntaxi tabulka.sloupec pro jednoznačné určení původního sloupce.

SELECT
DATE_FORMAT(datum, '%e.%m.%Y')
AS datum_format FROM {tabulka}
WHERE datum >= now()
ORDER BY datum LIMIT 1


SELECT
DATE_FORMAT(datum, '%e.%m.%Y')
AS datum FROM {tabulka}
WHERE datum >= now()
ORDER BY tabulka.datum LIMIT 1

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: