Autor | Zpráva | ||
---|---|---|---|
Peet Profil |
#1 · Zasláno: 26. 8. 2014, 23:38:02
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 |
#3 · Zasláno: 27. 8. 2014, 07:28:04
ORDER BY `order`=0, `order`, `date` DESC |
||
Peet Profil |
#4 · Zasláno: 27. 8. 2014, 17:22:19
A pokud používám Zend DbTable ?
$this->select(....)->order('order=0, order, date DESC') //takhle nefunguje
|
||
mimochodec Profil |
#5 · Zasláno: 27. 8. 2014, 23:51:37
Peet:
Syntaxi zendu neznám a nechci znát, ale tuším, že problém bude v tom, co psal juriad. |
||
Tori Profil |
#6 · Zasláno: 28. 8. 2014, 07:12:17
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 |
#7 · Zasláno: 28. 8. 2014, 12:18:26
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 |
#8 · Zasláno: 28. 8. 2014, 12:41:27
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') |
||
juriad_ Profil * |
#9 · Zasláno: 28. 8. 2014, 12:41:38
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')); |
||
Časová prodleva: 10 let
|
0