Autor | Zpráva | ||
---|---|---|---|
kenny46 Profil * |
#1 · Zasláno: 2. 6. 2010, 19:36:36
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 * |
#2 · Zasláno: 2. 6. 2010, 21:06:19
Vezmeš aktuální čas a potom SQL dotazem zjístíš kdy je nejbližší zápasa vypíšeš ho.
|
||
Časová prodleva: 19 dní
|
|||
h.r.v Profil * |
#3 · Zasláno: 21. 6. 2010, 11:27:02
a jak by mel ten dotaz vypadat?
|
||
Mastodont Profil |
#4 · Zasláno: 21. 6. 2010, 11:43:17
Asi takto: SELECT [sloupce] FROM zápasy WHERE čas > aktuální_čas ORDER BY čas LIMIT 1
|
||
h.r.v Profil * |
#5 · Zasláno: 21. 6. 2010, 21:35:20
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 |
#6 · Zasláno: 21. 6. 2010, 21:40:14
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 * |
#7 · Zasláno: 21. 6. 2010, 21:42:03
mas to ukladat do db time() (to ti uloží nějaké 145689) a pak das jen where cas >= ".time()."
|
||
AM_ Profil |
#8 · Zasláno: 21. 6. 2010, 21:43:09
tak jak psal radvis se to přesně nedělá, od toho je datový typ DATE/DATETIME/TIMESTAMP.
|
||
radvis Profil * |
#9 · Zasláno: 21. 6. 2010, 21:46:16
V čem je to špatně?
|
||
h.r.v Profil * |
#10 · Zasláno: 21. 6. 2010, 21:59:33
datum je datoveho typu DATE
|
||
AM_ Profil |
#11 · Zasláno: 21. 6. 2010, 22:00:47 · Upravil/a: AM_
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 * |
#12 · Zasláno: 21. 6. 2010, 22:05:28
Já vím k čemu to tam je, ale příjde mi to tak jednodužší.
|
||
h.r.v Profil * |
#13 · Zasláno: 21. 6. 2010, 22:08:35
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 |
#14 · Zasláno: 21. 6. 2010, 22:17:08 · Upravil/a: AM_
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 * |
#15 · Zasláno: 22. 6. 2010, 09:44:27
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 |
#16 · Zasláno: 22. 6. 2010, 10:51:13
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 * |
#17 · Zasláno: 22. 6. 2010, 12:16:35
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 * |
#18 · Zasláno: 22. 6. 2010, 12:27:23
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 |
||
Časová prodleva: 14 let
|
0