Přepsání dotazu s použitím IFNULL do NDB
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- tatyalien
- Člen | 239
Zdravím, mám dotaz… tenhle dotaz si sice můžu napsat růčo, ale jde nějak elegantně přepsat do NDB? Jde mě o to, že teď bych ještě na to měl napojovat podmínky WHERE na různé filtrování dat a v ručním zápisu to bude zase hrůza :-)
$t = $this->table_menuleft_itemized;
$g = $this->table_goods;
$gd = $this->table_goods_data;
// sloupce s jazykovou mutací - tabulka goods_data
$pole = Array('name', 'description', 'specifications', 'describeShortly', 'keywords');
$dotaz = '';
$i = 1;
$last = count($pole);
// výběr jazykové mutace, defaultně se vybere mutace s language_id "1"
foreach($pole as $val) {
$dotaz .= "IFNULL((SELECT $val FROM $gd WHERE $gd.goods_catalog = $g.catalog AND ".
"language_id = $language_id AND hidden = 0 LIMIT 1), (SELECT $val FROM $gd WHERE $gd.goods_catalog = $g.catalog".
" AND language_id = 1 LIMIT 1)) AS $val";
if($i != $last) {
$dotaz .= ', ';
}
$i++;
}
// výběr produktů dle zatřízení
$row = $this->database->query("SELECT $g.*, $dotaz".
" FROM $g WHERE $g.catalog IN (SELECT goods_catalog FROM $t WHERE $t.menuleft_id = ?)", $id)->fetchAll();
return $row;