model s podmínkou v selectu
- jik
- Člen | 150
Snažím obejít některé problémy (tady) a vychází mě z toho podmínky v dotazu do db. Tedy potřeboval bych něco na způsob:
SELECT id, cislo|| case when podlomeni>1 then ' / '||podlomeni else '' AS pc, ... FROM pozemek ...
Takto by to fungovalo. Ale Nette všude naháže uvozovky a s nimi to nechodí:
$this->findAll()->select("pozemek.id, cislo|| case when podlomeni>0 then ' / '||podlomeni else '' AS pc, ...")->...;
SELECT"id", "cislo"|| "case" "when" "podlomeni">0 "then" ' / '||"podlomeni" "else" '' AS "pc", ... FROM "pozemek"
Dá se to nějak obejít?
- David Matějka
- Moderator | 6445
@jik: klicova slova pis velkyma pismenama, to se escapovat nebude. ale moc bych takovehle konstrukce necpal do sql
- jik
- Člen | 150
matej21 napsal(a):
klicova slova pis velkyma pismenama, to se escapovat nebude.
Dík, toho jsem si nevšiml.
ale moc bych takovehle konstrukce necpal do sql
Já taky ne, ale ono mi nějak začalo přerůstat přes hlavu a někde zřejmě narážím na nějaké vnitřní záležitosti – mám problémy s jednou (!) tabulkou z více než 40 a několik dalších drobností – asi podobného původu. Toto by mohlo řešit moje bolení hlavy.
jenicek napsal(a):
a co zkusit MySQL?
No, už to nějaký čas tlačím na Postgresu, ale i výšeuvedený problém mě nutí o tom uvažovat.
- Jan Suchánek
- Člen | 404
@jik: OT: u pg jsem moc nepochopil vysledky dotazu s explain, ty jo?
Editoval jenicek (3. 4. 2014 14:41)
- jik
- Člen | 150
Hele, zase jedna věc, která mě až dosud netížila :-). No, vypadá to chytře, našel jsem toto , ale zatím mě to asi bolet nebude, protože (předpokládám) úpravy vyplývající z tohoto vlákna mě ušetří spoustu prostředků a času, kromě toho opravdu rozsáhlé výpočty řeším asynchronně spouštěním skriptů cronem.
- jik
- Člen | 150
Tak ještě jedna darebnost. Mám v modelu (zjednodušeně):
<?php
return $this->findAll()->select("id, rada, cislo, CASE WHEN rada>1 THEN 'St.' ELSE '' END AS cosi")->where(...);
?>
a vygeneruje to sql dotaz:
SELECT "id", "rada", "cislo", "podlomeni", CASE WHEN "rada">1 THEN **'"St"**.' ELSE '' END || "pozemek"."cislo" || CASE WHEN "podlomeni">0 THEN AS "cosi", ...
FROM "pozemek" ...
a je tam tedy navíc pár dvojitých uvozovek okolo St. – potřeboval bych, aby vystoupilo jen:
SELECT "id", "rada", "cislo", "podlomeni", CASE WHEN "rada">1 THEN **'St.'** ELSE '' END || "pozemek"."cislo" || CASE WHEN "podlomeni">0 THEN AS "cosi",
FROM "pozemek"
Nemáte někdo představu, jak to provést?