Autor Zpráva
Peet
Profil
Dobrý den, řeším následující problém. Mám databázi článků a každý článek má defaultně nastaven sloupec order na 0. pokud si ručně nastavím order u nějakého z nich na 1 tak chci aby se zobrazoval první. Když dám ORDER BY order ASC, tak je jasné, že nejprve se zobrazí všechny články, které mají nulu a poté ty které mají jinou hodnotu. Potřebuji udělat to, aby se mi nejprve vypsali články které mají jinou hodnotu order než 0 a ty aby se seřadili podle ORDER BY order ASC a poté aby se vypsali ty které mají sloupec order 0 a ty aby se seřadili podle ORDER BY date DESC. Jak e to dá vyřešit ? předem děkuji :)
juriad
Profil
Tady bylo chybné řešení, odeslal jsem jej dříve než jsem pořádně npřečetl zadání. Než jsem to stačil opravit, tak mě Kajman předběhl.

Mimochodem není dobrý nápad pojmenovávat sloupec order- je to totiž klíčové slovo. Změň to třeba na priority.
Kajman
Profil
ORDER BY `order`=0, `order`, `date` DESC
Peet
Profil
A pokud používám Zend DbTable ? $this->select(....)->order('order=0, order, date DESC') //takhle nefunguje
mimochodec
Profil
Peet:
Syntaxi zendu neznám a nechci znát, ale tuším, že problém bude v tom, co psal juriad.
Tori
Profil
Peet:
A pokud používám Zend DbTable?
http://framework.zend.com/manual/1.12/en/zend.db.select.html#zend.db.select.building.order
Peet
Profil
Určitě je toto správně ?
ORDER BY `order`=0, `order`, `date` DESC // má to dělat: nejprve seřaď výsledky které mají order!=0 ASC a poté ty ostatní které mají order=0 seřaď podle date DESC

tento zápis ani žádný jiný nefunguje: ->order(array('order=0, order','date DESC'))
Kajman
Profil
Peet:
tento zápis ani žádný jiný nefunguje

Pokud nefunguje ani něco takového
array('(order=0)', 'order', 'date DESC') // pro mysql
array('(case when order=0 then 1 else 0 end)', 'order', 'date DESC')
array(new Zend_Db_Expr('case when order=0 then 1 else 0 end'), 'order', 'date DESC')
array(new Zend_Db_Expr('case when '.$this->quoteIdentifier('order').'=0 then 1 else 0 end'), 'order', 'date DESC')
zkuste se zeptat na podpoře toho frameworku, jak se výrazy v jejich metodě order používají.
juriad_
Profil *
Zend to cele nejspis povazuje za nazev sloupce. Nejspis musis pouzit DBExpr, je o tom zminka v odkazanem manualu. Jakou chybu to hlasi?
Tori
Profil
Peet:
Pokud se nedá použít porovnání v části ORDER BY, tak si ho selektujte jako samostatný sloupec: SELECT (`order` = 0) AS `orderIsZero`, ..další sloupce a pak ten alias použijte v ORDER BY:
->order(array('orderIsZero', 'order', 'date DESC'));
edit: a přinejmenším Kajmanův první příklad by taky mohl fungovat - v [#7] máte první dvě řazení dohromady, mají být samostatně.

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:

0