Autor | Zpráva | ||
---|---|---|---|
Maringotka Profil * |
#1 · Zasláno: 23. 2. 2011, 22:57:25
Zdravím.
V tabulce [novinky] skladuji novinky. Při výpisu je řadím následovně: SELECT * FROM `novinky` ORDER BY `datum` DESC, `id` DESC Sloupec `datum` je UNIX TIMESTAMP, přičemž pro jedno datum je shodný (tzn. všechny novinky přidané dnes budou mít stejný timestamp). Dále sestupné řazení podle ID je tu proto, aby se později přidané novinky (tj. s vyšším ID) zobrazily ve výpisu výše. Ve své aplikaci také získávám konkrétní novinku podle ID. A zde je můj problém: Jakým způsobem mohu získat ID předchozí a následující novinky tak, aby to odpovídalo výše zmíněnému řazení? Následující kód nefunguje: SELECT *, `id` AS `actual_id`, `datum` AS `actual_date`, ( SELECT `id` FROM `novinky` WHERE `id` <> `actual_id` AND `datum` <= `actual_date` ORDER BY `datum` DESC, `id` DESC LIMIT 1) AS `prev`, ( SELECT `id` FROM `novinky` WHERE `id` <> `actual_id` AND `datum` >= `actual_date` ORDER BY `datum` DESC, `id` DESC LIMIT 1) AS `next` FROM `novinky` WHERE `id` = 47 |
||
Kajman_ Profil * |
#2 · Zasláno: 24. 2. 2011, 10:21:59
WHERE `datum` < `actual_date` OR (`datum` = `actual_date` AND `id` < `actual_id`) ... WHERE `datum` > `actual_date` OR (`datum` = `actual_date` AND `id` > `actual_id`) |
||
Maringotka Profil * |
#3 · Zasláno: 24. 2. 2011, 12:03:26
Kajman:
Ahoj. Tahle podmínka selže, pokavaď přidám novinku, která je staršího data než doposud nejnovější. Čili jakási vměstnaná novinka, která má nejvyšší ID, ale ne nejvyšší timestamp. Mám z toho převařený mozek :-( |
||
Joker Profil |
#4 · Zasláno: 24. 2. 2011, 12:15:17
Maringotka:
„Tahle podmínka selže, pokavaď přidám novinku, která je staršího data než doposud nejnovější.“ Neselže, mělo by to fungovat stejně jako řazení v prvním příspěvku. Tj. dodatečná novinka se zařadí podle času a teoreticky kdyby existovala jiná odeslaná přesně ve stejný čas, ta dodatečná bude „novější“. Čili pokud neodesíláte více novinek v přesně stejný čas (na sekundu), bylo by jednodušší prostě řadit jen podle sloupce datum. |
||
Maringotka Profil * |
#5 · Zasláno: 24. 2. 2011, 12:29:16
Joker:
V tom je právě ta potíž - pro celý den je timestamp stejný. Při ukládání se totiž převádí na aktuální datum, ovšem jako čas se zvolí půlnoc... Proto Kajmanova podmínka bohužel selže. Na druhou stranu si říkám, že řešení musí existovat, když jsem schopen získat seřazený výpis (vizte [#1])... |
||
Kajman_ Profil * |
#6 · Zasláno: 24. 2. 2011, 12:55:00
Podmínky jsou dobře, ale nevšiml jsem si, že jste měl chyby i v order by u next.
SELECT *, `id` AS `actual_id`, `datum` AS `actual_date`, ( SELECT `id` FROM `novinky` WHERE `datum` < `actual_date` OR (`datum` = `actual_date` AND `id` < `actual_id`) ORDER BY `datum` DESC, `id` DESC LIMIT 1) AS `prev`, ( SELECT `id` FROM `novinky` WHERE `datum` > `actual_date` OR (`datum` = `actual_date` AND `id` > `actual_id`) ORDER BY `datum`, `id` LIMIT 1) AS `next` FROM `novinky` WHERE `id` = 47 Něco podného je i ve faq. |
||
Maringotka Profil * |
#7 · Zasláno: 24. 2. 2011, 13:03:08
Kajman:
Mockrát děkuji, zachránil jste mě před zešedivěním :-) Za nepřečtení FAQ se stydím, příště se polepším :-( Ještě jednou díky! |
||
Časová prodleva: 13 let
|
0