Autor Zpráva
Exonic
Profil *
Zdravím,

Potřeboval bych složit dotaz:
SELECT * FROM maily WHERE jmeno='Jan' OR prijmeni='Novak' OR mesto='Brno'
s tím, že někdy může být zadáno pouze jmeno, jindy jmeno a prijmeni a někdy vše.
Chci se zeptat jak elegantně vyřešit vkládání podmínek za WHERE aby tam nepřebývalo OR.

Mám to nyní takto:
echo "SELECT * FROM maily WHERE ".(isset($jmeno) ? "jmeno='".$jmeno."' OR" : "").(isset($prijmeni) ? "prijmeni='".$prijmeni."' OR" : "").(isset($mesto) ? "mesto='".$mesto."'" : "")
Pokud všechny proměnné existují, je to v pořádku, ale pokud jedna vypadne například prijmeni a mesto, tak v dotazu přebývá OR a zpracování skončí chybou.

Existuje prosím nějaký jednoduchý způsob jak to vyřešit?

Moc děkuji za odpověď
Dan Charousek
Profil
Tak OR vkládej před podmínku:

echo "SELECT * FROM maily WHERE ".(isset($jmeno) ? "jmeno='".$jmeno."'  " : "").(isset($prijmeni) ? "OR prijmeni='".$prijmeni."'  " : "").(isset($mesto) ? "OR mesto='".$mesto."'" : "");
lionel messi
Profil
Exonic:
Mohlo by stačiť presunúť OR do inej podmienky takto:

echo "SELECT * FROM maily WHERE ".(isset($jmeno) ? "jmeno='".$jmeno : "").(isset($prijmeni) ? " OR prijmeni='".$prijmeni : "").(isset($mesto) ? " OR mesto='".$mesto."'" : "")

Príklad počíta s tým, že jmeno je zadané vždy.
Exonic
Profil *
Dan Charousek, lionel messi:
Jasně, problém je, že ono i to jmeno nemusí existovat. Pak by vzniklo WHERE OR :/
juriad
Profil
$conditions = array();
$conditions[] = "jmeno='" . $jmeno . "'";
$conditions[] = "prijmeni='" . $prijmeni . "'";
$conditions[] =  "mesto='" . $mesto . "'";
$where = implode(' OR ', $conditions);

Nebo:
$where = "1=0"; # vždy nesplněno
$where .= isset($jmeno) ? " OR jmeno='" . $jmeno . "'" : "";
$where .= isset($prijmeni) ? " OR prijmeni='" . $prijmeni . "'" : "";
$where .= isset($mesto) ? " OR mesto='" . $mesto . "'" : "";
Alphard
Profil
Jo, to by mohlo fungovat, než se někdo bude jmenovat O'Neill apod. A hádám že používáte extenzi mysql_* a učíte se podle 10 let starého návodu.
Můj pohled na věc viz Dotaz do tabulky s různými vstupy do klauzule WHERE.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0