Úprava řazení pouze části záznamů z MySQL

- jedlicka
- Člen | 72
Ahoj,
měl bych dotaz ohledně řazení záznamů z
Table/Selection.
Načtu seznam záznamů z MySQL pomocí selectu a seřadím dle data, např.
$contracts = $this->database->table(Constants::DB_TABLE_CONTRACTS)->where(array('uid' => $uid))->order('date DESC');
A v tom resultu bych potřeboval najít záznamy, které mají nějaký
flag (označeny jako urgentní urgent=1) a ty bych potřeboval
předřadit před ostatní záznamy (dát je na první místo).
Jak na to?
Děkuji za každou radu.
Martin

- jedlicka
- Člen | 72
Omlouvám se, napsal jsem to neúplně. Ten urgent není hodnota, ale odkaz
do jiné DB tabulky (urgent_id), kde je samotná hodnota urgent.
Potřeboval bych, aby se nejprve seřadily záznamy, které mají hodnotu
urgent=1 (v tabulce Urgent) a až poté ostatní
záznamy seřazené dle ‚data DESC‘.
Tabulka Records:
| id | uid | date | name | urgent_id |
| 1 | 10 | 2022–05–10 | test 1 | 1 |
| 2 | 10 | 2022–05–11 | test 2 | 2 |
| 3 | 10 | 2022–05–12 | test 3 | 3 |
| 4 | 10 | 2022–05–13 | test 4 | 4 |
Tabulka Urgent:
| id | urgent |
| 1 | 0 |
| 2 | 1 |
| 3 | 1 |
| 4 | 0 |
Result (nejprve záznamy s urgent=1, poté ostatní řazené podle
date DESC):
| 2 | 10 | 2022–05–11 | test 2 |
| 3 | 10 | 2022–05–12 | test 3 |
| 4 | 10 | 2022–05–13 | test 4 |
| 1 | 10 | 2022–05–10 | test 1 |

- jedlicka
- Člen | 72
@PavelKravčík Popravdě nevím jak. Potřebuji seřadit záznamy nejprve podle data a pak jim předřadit záznamy, které mají urgent 1 (může to být i obráceně – nejprve zobrazit záznamy s urgent 1 a pak ty ostatní seřadit podle data).
Provedu:
$contracts = $this->database->table(Constants::DB_TABLE_CONTRACTS)->where(array('uid' => $uid))->order('date DESC');
$contracts->order("FIELD(urgent_id," . implode(',', $this->urgent) . ") DESC");
kde $this->urgent je pole ID záznamů z tabulky
Urgent s urgent=1 (v tomto případě
array(2,3)).
ale to mi nefunguje.

- Pavel Kravčík
- Člen | 1206
@jedlicka: Máš to přece obráceně ne? Napiš si to nejdřív v čistým DB, ať e vyhneš chybám v kódu (vypadá trochu vachrlatě).
ORDER BY FIELD(firstname, "Tomáš") DESC, user.lastname ASC
//Tomáš Z, Zbyněk A, Aleš B