model s podmínkou v selectu

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

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?

Jan Suchánek
Člen | 404
+
0
-

@jik: Nevyplatilo by se ti připravit si na tohle view?

jik
Člen | 150
+
0
-

jenicek napsal(a):

@jik: Nevyplatilo by se ti připravit si na tohle view?

To vypadalo chytře, dokonce by to řešilo spoustu dalších věcí, až jsem si nadával, že jsem to dosud nepoužil. Ale PostgreSQL nemá indexované pohledy … Nedá se PRIMARY KEY nějak vyhnout?

Jan Suchánek
Člen | 404
+
0
-

@jik: a co zkusit MySQL?

David Matějka
Moderator | 6445
+
0
-

@jik: klicova slova pis velkyma pismenama, to se escapovat nebude. ale moc bych takovehle konstrukce necpal do sql

jik
Člen | 150
+
0
-

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

@jik: OT: u pg jsem moc nepochopil vysledky dotazu s explain, ty jo?

Editoval jenicek (3. 4. 2014 14:41)

jik
Člen | 150
+
0
-

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

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?