Úprava řazení pouze části záznamů z MySQL
- jedlicka
- Člen | 70
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 | 70
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 | 70
@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 | 1195
@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