Špatne seřazovani z databaze pomoci order id DESC
- t0x1c
- Člen | 151
Zdravím mám problem. Mám databazi nyni s 308 řádky po překročení 255 zaznamu se mi začaly prvky přehazovat nahodně v modelu mám toto
public function allItems() {
return $this->findAll()->order('id = 175 DESC')->order('id = 107 DESC');
}
Všecko šlo ok a zaznamy se vypisovaly podle id zestupně ale po překročeni 255 zaznamu se některe přidávají na začátek některe na konec a některe doprostřed. Je to nějaka chyba v nette nebo je chyba u mě?
- romiix.org
- Člen | 343
Nech na to pozerám ako chcem, nerozumiem čo by toto malo robiť.
Napíš sem prosím aký SQL to generuje a aký očakávaš.
- t0x1c
- Člen | 151
mr.mac napsal(a):
Co tam v tom order dělá ta hodnota id? Pokud chceš třídit dle
id
sestupně zapiš toto viz zde:public function allItems() { return $this->findAll()->order('id DESC'); }
Ano ja to chci řadit sestupně ale chci aby bylo id 175 a 107 prvni to mám ověřene a jde to toto jem zjistil na tomto foru. Když tam mam jen ‚id DESC‘ děla to to stejne akorat že 175 a 107 nejsou na prvním místě.
- David Matějka
- Moderator | 6445
verze nette? od 2.1 by mel fungovat tento zapis:
->order('id ? DESC', 175)
v 2.0 to asi nepude/bude blbnout
- t0x1c
- Člen | 151
j mam 2.0.11 tuším. Ale v tom to neni když to tam nemam a mam jen id DESC tak to proste seřazuje nahodně něco da na začatek něco na konec :D viz zde http://csgo-trade.net/weapons/ když dáte inspect na obrazek je tam id.
Editoval t0x1c (8. 12. 2013 18:45)
- Eda
- Backer | 220
No, však ty to řadíš podle toho, „zda se id rovná 175 sestupně“. Tzn u id = 175 bude výraz roven 1, jinak nula. Seřadíš to podle tohoto a to je výsledek se ještě seřadí obdobným způsobem pro 107. Tzn. nejdřív bude ID 175, pak ID 107, pak ostatní.
$this->findAll()->order('id = 175 DESC')->order('id = 107 DESC');
Neříkáš nic dalšího o tom, jak se má řadit ten zbytek (např. jestli má být 109 před 110 nebo naopak). Tzn databáze si to srovná, jak chce.
Řešení by mělo být takové, že to krom toho 107 a 175 srovnáš i podle ID:
$this->findAll()->order('id = 175 DESC, id = 107 DESC, id DESC');
Editoval Eda (8. 12. 2013 19:43)
- t0x1c
- Člen | 151
Eda napsal(a):
No, však ty to řadíš podle toho, „zda se id rovná 175 sestupně“. Tzn u id = 175 bude výraz roven 1, jinak nula. Seřadíš to podle tohoto a to je výsledek se ještě seřadí obdobným způsobem pro 107. Tzn. nejdřív bude ID 175, pak ID 107, pak ostatní.
$this->findAll()->order('id = 175 DESC')->order('id = 107 DESC');
Neříkáš nic dalšího o tom, jak se má řadit ten zbytek (např. jestli má být 109 před 110 nebo naopak). Tzn databáze si to srovná, jak chce.
Řešení by mělo být takové, že to krom toho 107 a 175 srovnáš i podle ID:
$this->findAll()->order('id = 175 DESC, id = 107 DESC, id DESC');
Aha dik Edo už je to ok ale divne je že do těch 255 zaznamu to šlo bylo to uplně ok tak jak jsem to měl. A když mam teď 302 záznamů tak se to tak rozházelo :D