Vypsání řádků z tabulky s více podmínkami

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

Ahoj,
nějak nemohu dat do kupy nějaký jednodušší dotaz v modelu kde:

  • do funkce která mě má vyhodit vásledek posílám 4 parametry – každý s jinou hodnotou (dejme tomu 1,2,3,4)
  • v závislosti na těchto hodnotách bych potřeboval sestavit dotaz který mě vyhodí řádky z db kde jsou buď všechny výsledky nebo alespoň nějaký které odpovídají daným hodnotám.

Doufám že jste pochopili s čím bych potřeboval poradit.
Používám nette database.

Děkuji za rady.

romiix.org
Člen | 343
+
0
-

Nepochopil som podstatu problému.

xciza
Člen | 194
+
0
-

romiix.org napsal(a):

Nepochopil som podstatu problému.

Ok zkusim to trochu vice specifikovat:
V presenteru mam vytvoreny formular, ktery v sablone vykresluji. Formular slouzi k zadani udaju pro vyhledavani v jedne tabulce v db. Po odeslani formu ho presmeruji na metodu renderDefault s parametry zadanymi ve formulari. Zde parametry predam do metody modelu kde potrebuji sestrojit dotaz do db aby fungoval nejak takto:
Zadane parametry nemusi byt vyplneny vsechny. Z db by me to melo vypsat radky kde se vyskytuje jeden nebo vice parametru zadanych ve formulari. Zvladl bych to udelat pomoci podminek kde bych kontroloval jestli je parametr vyplnen ale chtel bych vedet jestli to je udelat lepsim zpusobem nez asi 15 if podsebou?do if podminek bych musel dat vsechny mozne kombinace zadanych a nezadanych parametru.

xciza
Člen | 194
+
0
-

Nikdo neví, nebo jste nepochopili můj problém?

Oli
Člen | 1215
+
0
-

Kvuli bezpečnosti to asi musíš ověřit vždy. Jednak nazev parametru a jednak hodnotu jestli je mezi nějakejma limitníma hodnotama. Ale třeba je nějakej lepší způsob jak každej parametr kontrolovat v ifu…

besir
Člen | 170
+
0
-

Nevím jestli nejsem zmaten já, nebo je svět dnes nějak naruby??

K věci:
Jestli chápu dobře, tak Ti jde jen o podmínku WHERE s OR mezi hodnotami… Nebo jde o to aby v té podmínce vůbec nebyl daný parametr pokud není vyplněn? Pak bych asi hledal řešení v něčem takovém jakože zavoláš unset na položky z formuláře které jsou prázdné a z toho Ti zbude vyčištěné pole které pak jen:

  1. slepíš dohromady s potřebnou podmínkou (pokud používáš něco jako dibi query – nepoužívám ND, tak nevím přesně)
  2. protraverzuješ nad polem a k dotazu přidáš ->or()->where(‚column == %s‘, $value)
petr.pavel
Člen | 535
+
0
-

@xciza: Fakt to není moc dobře popsané. Já pochopil, že je to jedna z následujících situací:

  1. potřebuješ vrátit hodnoty odpovídající všem zadaným parametrům, nebo když nic neodpovídá, tak všechny hodnoty. Řešením jsou dva dotazy (syntaxe pro NotORM):
$vysledek = $db->tabulka()->where('atribut1', $hodnota1)->where('atribut2', $hodnota2)...
if (!count($vysledek)) {
  $vysledek = $db->tabulka();
}
  1. nebo potřebuješ na úrovni každého atributu testovat, zda byl zadán nebo ne.
$vysledek = $db->tabulka();
if ($hodnota1) {
  $vysledek->where('atribut1', $hodnota1);
}
// atd. pro všechny další parametry

Tohle jde ulehčit pouze pokud jde parametry zpracovávat stejným způsobem:

$vysledek = $db->tabulka();
$atributy = array('jedna', 'dva');
foreach ($atributy as $atribut) {
  if ($parametry[$atribut]) {
    $vysledek->where($atribut, $parametry[$atribut]);
  }
}

Všechno tohle jsou v podstatě základy programování/práce s NDB. Nevím, jestli jsi začátečník nebo jestli jenom nedokážeš popsat, co řešíš ;-)

xciza
Člen | 194
+
0
-

Asi vyhraváš bludišťáka. Za b bude asi to, co potřebuji (ale druhá varianta). Asi jsem se fakt spatne vyjadril aby to nekdo pochopil… Ten todaz bych dal do kupy s mnoha podminkama (verze b prvni varianta), potřeboval jsem to nějak zjednodušit a nemohl jsem najít řešení. Tvé vyzkouším a uvidím. Díky