Vypsání řádků z tabulky s více podmínkami
- xciza
- Člen | 194
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.
- xciza
- Člen | 194
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.
- besir
- Člen | 170
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:
- slepíš dohromady s potřebnou podmínkou (pokud používáš něco jako dibi query – nepoužívám ND, tak nevím přesně)
- protraverzuješ nad polem a k dotazu přidáš ->or()->where(‚column == %s‘, $value)
- petr.pavel
- Člen | 535
@xciza: Fakt to není moc dobře popsané. Já pochopil, že je to jedna z následujících situací:
- 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();
}
- 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
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