skládání SQL dotazu (ORDER BY, ASC vs. DESC)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jarek92
Člen | 91
+
0
-

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
+
0
-

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
+
0
-

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
+
+1
-

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)

Jarek92
Člen | 91
+
+1
-

Aha, vlastně. Díky moc :)

Mysteria
Člen | 797
+
0
-

Nechceš náhodou volat to query nad databází? Tzn něco jako $this->connection->query()?

Mysteria
Člen | 797
+
+1
-

Zjisti si základy OOP nad PHP, tak asi tam nemáš žádnou property s názvem connection. Dej sem celou tu třídu jak ji máš definovanou.