skládání SQL dotazu (ORDER BY, ASC vs. DESC)
- Jarek92
- Člen | 91
Má někdo zkušenosti se složitějším skládáním SQL dotazů? Konkrétně, jak se dá dosazovat jména sloupečků v DB či způsob řazení ASC/DESC. Prostě něco ve smyslu:
SELECT * FROM table1 NATURAL JOIN table2 WHERE nejake_podminky ORDER BY ? ?
kde otazníky by byly dosazené parametry, dle situace, např. ORDER BY sloupec DESC.
- Filip Klimeš
- Nette Blogger | 156
Joiny se v Nette DB řeší samy, ORDER BY se dá jednoduše provést na třídě Selection
// v modelu
return $this->table()->where('name', 'jmeno')->order'sloupec', 'ASC');
Pokud bys potřeboval něco složitějšího, vždycky si můžeš napsat
svůj dotaz a spustit ho pomocí query()
, to je v dokumentaci vysvětleno.
Případně se podívej do dokumentace NotORM, spousta věcí je podobná
Editoval FilipKlimeš (24. 1. 2015 18:59)
- Jarek92
- Člen | 91
jj to chápu.
napíšu to konkrétně.
mám tento kod:
if($this->disciplina->isRelay($disciplina_id)){
$razeni = "ASC";
} else { $razeni = "DESC"; }
return $this->connection->query('SELECT * FROM zaznamy WHERE podminky ORDER BY vykon ?', $razeni)->fetchAll();
Jenže to mi samozřejmě nevezme, protože ASC nebo DESC je klíčové slovo v MySQL. Ptám se tedy jestli je nějaká finta na dosazení způsobu řazení, nebo jestli musím kvůli jednomu slovu (ASC) psát totožný dotaz 2×. Díky :)
- Filip Klimeš
- Nette Blogger | 156
Není potřeba dosazovat klíčová slova místo otazníků, protože je v tomto případě není potřeba escapovat. Nejsou nebezpečná. Stačilo by tedy udělat:
return $this->connection->query('SELECT * FROM zaznamy WHERE podminky ORDER BY vykon ' . $razeni)->fetchAll();
Editoval FilipKlimeš (24. 1. 2015 19:13)