У меня есть простое веб-приложение, в котором перечислены различные типы данных в таблицах с возможностью поиска.
Я использую MySQL для базы данных.
Например, есть список сотрудников с именем FirstName , LastName и т. Д.
Пример Employees
table:
ID | FIRSTNAME | LASTNAME | EMAILADDRESS
---------------------------------------------
001 | John | Smith | js@gmail.com
002 | John | Jones | jj@gmail.com
003 | Michael | Smith | ms@gmail.com
004 | Betty | Taylor-Smith | bts@gmail.com
Там простое текстовое поле для поиска.
Искать John Smith
результаты - это все, что содержит John
И Smith
:
001 | John | Smith
Поиск John
, результаты - все, что имеет John
в it:
001 | John | Smith
002 | John | Jones
Искать Smith
, результаты - все, что содержит Smith
:
001 | John | Smith
003 | Michael | Smith
004 | Betty | Taylor-Smith
Итак ... мой вопрос ... как мне напишите для этого запрос SQL?
select * from employees where ...
Если я ищу John Smith
...
((firstname like "%John%") OR (firstname like "%Smith%"))
AND
((lastname like "%John%") OR (lastname like "%Smith%"));
AND
((emailaddress like "%John%") OR (emailaddress like "%Smith%"));
Возвращает нулевые результаты, потому что emailaddress
не соответствует.
Если я заменю И на ИЛИ ...
((firstname like "%John%") OR (firstname like "%Smith%"))
OR
((lastname like "%John%") OR (lastname like "%Smith%"));
OR
((emailaddress like "%John%") OR (emailaddress like "%Smith%"));
Тогда я получу все четыре результата, потому что в каждой строке есть John
или Smith
... что не результат, который я хочу, мне нужна только первая строка 001.
001 | John | Smith | js@gmail.com
002 | John | Jones | jj@gmail.com
003 | Michael | Smith | ms@gmail.com
003 | Betty | Taylor-Smith | bts@gmail.com
Как мне подойти к этому запросу SQL?