Autor Zpráva
suk552
Profil
Ahoj,
potřeboval bych radu k mému webu. Na webu mám umístěný seznam majetků a potřeboval bych k seznamu přidat filtr vyhledávání.
Tzn., že uživatel vybere v prvním políčku svůj kraj, ve druhém políčku své město a ve třetím políčku například svůj věk.
Vše bych potřeboval mít napojené na MySQL databázi. Dokázal by mi někdo prosím poradit?
Díval jsem se na internet, ale vůbec nikde nemůžu nic najít :/

Předem díky za pomoc.
juriad
Profil
Pro každý parametr, pokud byl uživatelem vyplněn, vygeneruješ příslušnou podmínku pro WHERE klazuli.
$conditions = ['1 = 1']; # aby WHERE klauzule nezůstala prázdná
if (isset($_POST['kraj'])) {
  $conditions[] = 'kraj = ' . intval($_POST['kraj']);
}
if (isset($_POST['mesto'])) {
  $conditions[] = 'mesto = ' . intval($_POST['mesto']);
}
if (isset($_POST['vek'])) {
  $conditions[] = 'vek = ' . intval($_POST['vek']);
}

$sql = 'SELECT * FROM tabulka WHERE ' . implode(' AND ', $conditions);

Samozřejmě, že to může být složitější, neboť pro vykonání určité podmínky můžeš potřebovat přijoinovat nějakou tabulku, pak bych podmínku přidal do klauzule ON.
Uvažujme, že kraj je uložen v číselníku měst a nikoli přímo v majetku.
$from = ['tabulka t']; # seznam tabulek
$conditions = ['1 = 1']; # aby WHERE klauzule nezůstala prázdná
if (isset($_POST['kraj'])) {
  $from[] = 'mesta m ON m.mesto = t.mesto AND m.kraj = ' . intval($_POST['kraj']);
}
if (isset($_POST['mesto'])) {
  $conditions[] = 'mesto = ' . intval($_POST['mesto']);
}
if (isset($_POST['vek'])) {
  $conditions[] = 'vek = ' . intval($_POST['vek']);
}

$sql = 'SELECT * FROM ' . implode(' JOIN ', $from) . ' WHERE ' . implode(' AND ', $conditions);

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: