Autor | Zpráva | ||
---|---|---|---|
Enrique Profil * |
#1 · Zasláno: 28. 4. 2013, 21:25:42
Dobrý den, v tabulce mám timestamp1 a timestamp2. Timestamp1 je vyplněn vždy, timestamp2 může být 0.
Potřeboval bych vypsat položky z tabulky a řadit je podle timestamp1, avšak pokud je timestamp2 mladší jak týden, tak nejprve vypsat položky podle timestamp2 a až za nimi podle timestamp1. Na netu jsem našel zápis ORDER BY IF (timestamp2>=".(time()-604800).", timestamp2, timestamp1) DESC , avšak nefunguje mi.
Předem děkuji za pomoc. |
||
Joker Profil |
#2 · Zasláno: 28. 4. 2013, 21:37:22
Enrique:
Uvedený postup by snad měl být správný. Co znamená nefunguje? |
||
Enrique Profil * |
#3 · Zasláno: 28. 4. 2013, 21:41:13
Neřadí se to tak jak bych potřeboval... Vždy se musí vypsat nejprve položky seřazené podle timestamp2, pokud tento není 0 nebo starší jak týden, i v případě, že se přidá nová položka, která bude mít timestamp1 vyšší než timestamp2.
|
||
Tori Profil |
#4 · Zasláno: 28. 4. 2013, 21:52:49
Enrique:
A je sloupec timestamp2 typu INT anebo TIMESTAMP? Pokud to druhé, tak to upravte na: ORDER BY IF (timestamp2>='".date('Y-m-d H:i:s', time()-604800)."', timestamp2, timestamp1) DESC |
||
Enrique Profil * |
#5 · Zasláno: 28. 4. 2013, 21:56:39
Je typu INT...
|
||
Tori Profil |
Zkuste toto, jestli to bude řadit požadovaným způsobem:
(select * from tabulka where timestamp2 >= ".(time()-604800)." order by timestamp2 desc limit 123456789) union all (select * from tabulka where timestamp2 < ".(time()-604800)." order by timestamp1 desc limit 123456789) |
||
Enrique Profil * |
#7 · Zasláno: 28. 4. 2013, 23:02:08
Děkuji, já to mezitím vyřešil takto, tohle mi funguje:
ORDER BY CASE WHEN timestamp2>=".(time()-604800)." THEN timestamp2 ELSE 1 END DESC, timestamp1 DESC
Mám to technicky správně? :) |
||
Časová prodleva: 11 let
|
0