IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vyhledávání v několika sloupcích databáze v PHP

Aktivity
Avatar
Pavel Gárský:7.9.2020 19:20

Ahoj, hledám způsob, jak zprovoznit vyhledávací formulář v HTML a PHP.

Ve formuláři mám několik polí, např. companyName, companyID a companyICO.

Pro komunikaci s databází používám wrapper z této sítě, zde konkrétně funkci DB::dotazVsechny().

// Spustí dotaz a vrátí všechny jeho řádky jako pole asociativních polí
    public static function dotazVsechny($dotaz, $parametry = array()) {
                $navrat = self::$spojeni->prepare($dotaz);
                $navrat->execute($parametry);
                return $navrat->fetchAll();
        }

SQL dotaz:

$filter = DB::dotazVsechny("SELECT * FROM db_companies WHERE company_id LIKE ? OR company_name LIKE ? OR company_ico LIKE ?", $parameters);

return $filter;

Ve vyhledávání má být možnost vyplnit libovolné pole, a ty poté spojit a podle nich zobrazit výsledky (např. když zadám company_name, který bude u několika záznamů v databázi stejný, zobrazí se všechny, ale pokud doplním i company_ico, zobrazí se pouze záznam, který odpovídá těmto dvěma hodnotám.

Když však některá pole nevyplním, SQL automaticky vyhledá všechny záznamy, které je nemají doplněny a připíše je do výsledků vyhledávání.

Zkusil jsem: Vyzkoušel jsem místo "OR" použít v SQL dotazu "AND", avšak zde je problém stejný.

Chci docílit: Prázdná pole ve vyhledávání budou ignorována a nezahrnována do SQL dotazu.

Editováno 7.9.2020 19:22
 
Odpovědět
7.9.2020 19:20
Avatar
Jiří Havelka:7.9.2020 20:42

Ty vpodstaťe potřebuješ dynamicky měnit tvar sql dotazu. pokusím se to ukázat na příkladu

$columns = [  // tuhle proměnou naplníš dynamicky podle vyplněných polí ve formuláři
    'db_sloupec_1',
    'db_sloupec_2',
    'db_sloupec_3',
    'db_sloupec_4',
    'db_sloupec_5',
    'db_sloupec_6',
];
$sql = 'SELECT * FROM table WHERE ';
$wherePart = implode(' LIKE ? OR ', $columns);
$sql .= $wherePart;

echo $sql; // tohle předhodíš tomu svému wraperu
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
7.9.2020 20:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.