Autor Zpráva
Enrique
Profil *
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
Enrique:
Uvedený postup by snad měl být správný. Co znamená nefunguje?
Enrique
Profil *
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
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 *
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)
edit: Chyba, napsala jsem to zbytečně komplikovaně, a zjednodušená verze je v podstatě totéž, co jste nakonec použil. ↓
Enrique
Profil *
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ě? :)

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: