Autor | Zpráva | ||
---|---|---|---|
glerak Profil * |
#1 · Zasláno: 15. 1. 2011, 21:15:04
Zdar všem.
Prosím o radu - je li to v MySQL řešitelné (V opačném případě to pořeším v PHP, ale vnesu si další zmatek to kódu). Mám tabulku: mysql> SELECT time_write, id_tema FROM clanek LIMIT 5; +---------------------+---------+ | time_write | id_tema | +---------------------+---------+ | 1999-10-31 00:00:00 | 1 | | 2000-09-02 00:00:00 | 1 | | 2001-12-21 00:00:00 | 1 | | 2002-12-30 00:00:00 | 1 | | 2003-08-30 00:00:00 | 1 | +---------------------+---------+ 5 rows in set (0.00 sec) Podle mých představ funguje mysql> SELECT MAX(YEAR(clanek.time_udalost)) AS rok FROM clanek WHERE clanek.id_tema = 1; +------+ | rok | +------+ | 2010 | +------+ 1 row in set (0.00 sec) Už ale není dle mých představ toto: mysql> SELECT MAX(YEAR(clanek.time_udalost)) AS rok FROM clanek WHERE clanek.id_tema = 2; +------+ | rok | +------+ | NULL | +------+ 1 row in set (0.00 sec) Hrozně rád bych MySQL donutil,aby mi v tom druhém případě vrátila 0 výsledků, a nikoliv NULL. Je nějaká možnost? Děkuji za rady. |
||
ShiraNai7 Profil |
#2 · Zasláno: 15. 1. 2011, 21:21:03
Nenapada me jak by to jednoduse slo. A posuzovani v PHP pomoci isset (pripadne === null) mi neprijde jako vnaseni zmatku.
|
||
Kajman_ Profil * |
#3 · Zasláno: 15. 1. 2011, 21:27:44
SELECT IFNULL(MAX(YEAR(clanek.time_udalost)),0) ... |
||
glerak Profil * |
#4 · Zasláno: 15. 1. 2011, 22:42:23
Kajman:
Díky, ale nepotřebuji vrátit '0', alebrž nula řádků :-) ShiraNai7: Ok, díky. Jasné, jenom mi už nestačí mnou používané if (!$result=DotazNaDB($sql)... Jasně - je to drobnost, ale myslel jsem, že to musí jít na straně DB :-) S tím zmatkem je to spíše narážka na můj už tak dosti zmatečný kód... |
||
Kajman_ Profil * |
#5 · Zasláno: 15. 1. 2011, 22:46:59
having rok is not null |
||
glerak Profil * |
#6 · Zasláno: 15. 1. 2011, 23:30:35
Kajman:
Moc díky za snahu, ale nějak si s tím stejně neumím poradit. Porád mi něco vrací. Nejspíš to prostě nejde. Ta funkci MAX asi holt neznásilním. mysql> SELECT MAX(YEAR(clanek.time_udalost)) IS NOT NULL AS rok FROM clanek WHERE clanek.id_tema = 2; +-----+ | rok | +-----+ | 0 | +-----+ 1 row in set (0.00 sec) mysql> SELECT MAX(YEAR(clanek.time_udalost)) AS rok FROM clanek WHERE clanek.id_tema = 2 AND clanek.time_udalost IS NOT NULL; +------+ | rok | +------+ | NULL | +------+ 1 row in set (0.00 sec) Neumím moc dobře anglicky, takže jsem možná někde něco přehlédl, ale fakt jsem se snažil hledat. Každopádně, ve finále jsem (už jenom z důvodu "to přece musí nějak jít") vyplodil tohle: mysql> SELECT YEAR(clanek.time_udalost) AS rok FROM clanek WHERE YEAR(clanek.time_udalost) = (SELECT MAX(YEAR(clanek.time_udalost)) FROM clanek) AND clanek.id_t ema = 1 LIMIT 1; +------+ | rok | +------+ | 2010 | +------+ 1 row in set (0.00 sec) mysql> SELECT YEAR(clanek.time_udalost) AS rok FROM clanek WHERE YEAR(clanek.time_udalost) = (SELECT MAX(YEAR(clanek.time_udalost)) FROM clanek) AND clanek.id_t ema = 2 LIMIT 1; Empty set (0.00 sec) mysql> Ale nejsem si jist, jestli je to k použití... :-) |
||
TomášK Profil |
#7 · Zasláno: 15. 1. 2011, 23:34:36 · Upravil/a: TomášK
glerak
viz Kajmanova rada: SELECT MAX(YEAR(clanek.time_udalost)) AS rok FROM clanek WHERE clanek.id_tema = 2 having rok is not null; WHERE filtruje záznamy před groupováním, having po něm. |
||
glerak Profil * |
#8 · Zasláno: 15. 1. 2011, 23:53:58
TomášK:
Super, funguje to. Jsem zase o něco chytřejší :-) Díky všem za rady :-) |
||
Kajman_ Profil * |
#9 · Zasláno: 16. 1. 2011, 00:35:13
Ještě jedna poznánka
SELECT YEAR(MAX(clanek.time_udalost)) AS rok By mohlo být za určitých okolností výrazně rychlejší. |
||
Časová prodleva: 13 let
|
0