Autor Zpráva
Izzi
Profil
Zdravím,

mám problém s špecifickým vybratím z tabuľky. Hľadal som v oficiálnej dokumentácii, na stackoverflow, v tejto diskusii, na google.. našiel som niečo ako isnull, not exists, skúšal som rôzne kombinácie podmienkových klauzulí ale i tak sa mi to nepodarilo.

Potrebujem vybrať z tabuľky jeden najbližší záznam. To znamená: WHERE datum >= 2012-09-07. Ak taký záznam neexistuje, chcem potom vybrať posledný záznam (dátum je najväčší; ORDER BY datum DESC LIMIT 1).

Ako to zapíšem?
Za pomoc vopred ďakujem.
Sir Tom
Profil
Izzi:
Také zdravím,
moc nerozumím zadání, ale

SELECT * FROM table WHERE datum <= 2012-09-07 ORDER BY datum DESC LIMIT 1

by snad měl fungovat. (Vybere 1 záznam, který má největší datum a zároveň má hodnotu datum stejnou nebo menší než 2012-09-07).

http://www.linuxsoft.cz/article.php?id_article=901
Izzi
Profil
SELECT * FROM table WHERE datum <= 2012-09-07 ORDER BY datum DESC LIMIT 1

Práve naopak, potrebujem vybrať záznam s dátumom väčším ako dnešok (2012-09-07), teda záznam, ktorý sa viaže na neskorší dátum a vtedy, keď taký zázanm neexistuje, tak sa vyberie posledná položka z tabuľky.
Keeehi
Profil
(SELECT * FROM table WHERE datum >= 2012-09-07 ORDER BY datum DESC LIMIT 1)
UNION
(SELECT * FROM table WHERE datum ORDER BY datum DESC LIMIT 1)
LIMIT 1

Ale možná to jde jednodušeji
Sir Tom
Profil
Izzi:
Stačí změnit operátor porovnávání. Ale abych pravdu řekl, stále netuším, co se snažíš udělat. Proč musí být v dotazu klauzule WHERE, když stačí vybrat, všechny záznamy a vybrat z nich tu s největším datumem? Pokud ona vybraná položka pak bude mít datum menší, než je aktuální den, tak pak se udělá nový výběr, kde se tentokrát vybere ona poslední položka z tabulky (přes sloupec created, id, ...).

Můžeš zkusit použít fci IF (http://www.linuxsoft.cz/article.php?id_article=933), ale tu jsem nikdy v praxi vůbec neviděl...

EDIT: nebo union - viz Keeehi
Izzi
Profil
Sir Tom:

Pretože v tabuľke môžu byť záznamy s týmito dátumami (rok-mesiac-den):

zaznam1 | 2012-12-12
zaznam2 | 2012-11-10
zaznam3 | 2012-09-09
zaznam4 | 2012-08-01
zaznam5 | 2012-06-24
...
...

Podľa príkazu, ktorý ste navrhli vyššie by vybralo záznam4 2012-08-01

Proč musí být v dotazu klauzule WHERE, když stačí vybrat, všechny záznamy a vybrat z nich tu z největším datumem?
zaznam1 2012-12-12

A ja potrebujem vybrať zaznam3 2012-09-09
A ak by bol dnešný dátum 24. 12. 2012, tak by z tabuľky vybralo posledný zaznam1 2012-12-12

Keeehi:
Ďakujem, také niečo som hľadal.
Keeehi
Profil
Izzi:
Osobně bych to ale udělal dvěma dotazy. Jako první by byl ten, který by se používal pravděpodobněji častěji. Podle mě ten UNION bude jen zdržovat, ale testy jsem nedělal.
Kajman
Profil
(SELECT * FROM table WHERE datum >= '2012-09-07' ORDER BY datum ASC LIMIT 1)
UNION
(SELECT * FROM table ORDER BY datum DESC LIMIT 1)
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:

0