I'm using MySQL and I have a table with these fields :
- id
- name
- kode_fakultas
- year
I want to create a form for searching based on user input. Example, if the user search is based on name
, but the fields kode_fakultas
and year
are not filled with a value, then the form should retrieve the results based on name
. And if the user wants to search based on kode_fakultas
, but name
and year
are not filled in, then the form would retrieve results based on kode_fakultas
only.
My query seems wrong, because I don't get the results that I want.
select * from teacher
where name like '%".$name."%' or year = '".$year."' or kode_fakultas = '".$fak."
Best Answer
Do not try to do it all in a single query. But first, I will digress...
If you said
AND
instead ofOR
, that query needsIndexing
name
is useless because of the leading wildcard on theLIKE
expression.But you have
OR
, so no indexing is useful; the entire table will be scanned, checking each row for 3 conditions to see if any match.But that is not really what your UI is asking for. To rephrase your requirements:
Your code must then build a query with only one of the tests in it, then execute it. At that point, you would need
but be stuck with a table scan if you need the leading wildcard on the
LIKE
.