Autor | Zpráva | ||
---|---|---|---|
Izzi Profil |
#1 · Zasláno: 7. 9. 2012, 19:50:04
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 |
#3 · Zasláno: 7. 9. 2012, 21:14:08
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 |
#4 · Zasláno: 7. 9. 2012, 21:19:00
(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 |
#7 · Zasláno: 7. 9. 2012, 21:38:03
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 |
#8 · Zasláno: 7. 9. 2012, 22:22:29
(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 |
||
Časová prodleva: 12 let
|
0