Jak naprogramovat vyhledávací filtr

gizer
Člen | 67
+
0
-

Dobrý den,

při vyhledávání v databázi používám formulář, kde jsou pole jako Jméno, Příjmení, ulice, č.p, č.orientační, PSČ, email, telefon a město.

Rád bych naprogramoval filtr, kterým postupně zužuji výběr z databáze. Např. vyfiltruji město (20) údajů. V těch chci hledat správnou ulici (3 údaje). V těch 3 údajích si pak vyberu třeba příslušné jméno nebo č.p. atd.

Děkuji moc za případnou radu jak správně na to.

Polki
Člen | 553
+
0
-

Od toho existuje Dependent Selectbox například.

Martk
Člen | 661
+
0
-

Dependent Selectbox nedává smysl, pokud je v databázi hodně záznamů a nepotřebuje vybrat konkrétní položku. To už spíše wizard nebo datagrid. Záleží jak chceš aby se to používalo.

Editoval Martk (31. 10. 2021 21:47)

Polki
Člen | 553
+
0
-

@Martk nedává smysl v případech, kdy chceš vybrat více měst a filtrovat, jestli je uživatel ve všech městech a pak vybírat z těch měst konkrétní ulice. Sice jde použít na toto multiselect a tedy i dependent selectbox, nejspíš vlastnoručně napsaný, ale pointa mého kommentu je ta, že ten způsob tahání dat je vždy stejný a stačí se dependent selectboxem inspirovat, kdyby nevyhovoval. Navíc podle popisu to vypadá, že dependent selectbox bude stačit.

EDIT 1: A klidně můžeš dependent selectbox kombinovat s datagridem v tom problém nevidím.

Editoval Polki (31. 10. 2021 23:53)

gizer
Člen | 67
+
0
-

Děkuji moc za náměty. Zkusím nastudovat ten datagrid a uvidíme.

Editoval gizer (1. 11. 2021 8:54)

gizer
Člen | 67
+
0
-

Každopádně by mně také zajímalo, jak jednoduše vyřešit dotaz SELECT v MySQL, kterým budou zpřísňována kritéria.
Například zadám pouze město a vyjedou všechny záznamy z daného města. Následně přidám ulici a záznamy se zúží pouze na tuto ulici v předtím vybraném městě. To samé s číslem domu atd.

Vyhledávací tabulka, která má pole(Jméno, Příjmení, ulice, č.p, č.orientační, PSČ, email, telefon a město.) by měla mít možnost být vyplněna úplně nebo částečně.

Kamil Valenta
Člen | 822
+
+2
-
$selection = $this->database->table('table');

if (!empty($jmeno)) {
    $selection->where('jmeno', $jmeno);
}

if (!empty($prijmeni)) {
    $selection->where('prijmeni', $prijmeni);
}

...

Where samozřejmě může být různý, někde LIKE apod. Dle kontextu.

gizer
Člen | 67
+
0
-

Děkuji, ale myslím, že tento systém jednotlivých výběrů v databází také nebude dobře fungovat. Jde o to, že když například vyberu město A a také vyberu číslo popisné třeba 1020, tak pokud budou stejná čísla 1020 v obou městech A a B, tak se také vyberou.

Nejedná se tedy o zúžení výběru.

Šaman
Člen | 2667
+
+3
-

Máš to vyzkoušené? Protože Nette\Database\Explorer spojuje where podmínky implicitně operátorem AND.

gizer
Člen | 67
+
0
-

Vyzkoušené to ještě nemám, ale určitě to co nejdříve vyzkouším. Pokud by tam opravdu však bylo to implicitní nastavení, tak by to mohlo fungovat.

Editoval gizer (1. 11. 2021 12:54)

Kamil Valenta
Člen | 822
+
+2
-

Nemusí to být „co nejdříve“, stačilo by „nejdříve“ ;)

gizer
Člen | 67
+
0
-

Každopádně děkuji moc všem za rady i náměty.