@remlin1000
любитель

Как сформировать SQL запрос — фильтр по нескольким полям?

таблица Клиенты
1. id
2. surname
3. name
4. secondname


наполнение:
1 | Иванов | Николай | Олегович
2 | Иванов | Сергей | Кириллович
3 | Сидоров | Константин | Алексеевич
4 | Самсонов | Николай | Иванович

Запрос может задаваться одним или несколькими словами (частями слов) через пробел, например:

1. Запрос "Ива" должен вернуть строки:
1 | Иванов | Николай | Олегович
2 | Иванов | Сергей | Кириллович
4 | Самсонов | Николай | Иванович

Тут вопросов нет:
Select * from 'Клиенты' WHERE
surname Like '%Ива%' or name Like '%Ива%' or secondname Like '%Ива%'


2. Запрос "Ива Никол" должен вернуть строки:
1 | Иванов | Николай | Олегович

Я создал такой запрос:
Select * from 'Клиенты' WHERE
surname Like '%Ива%' or name Like '%Ива%' or secondname Like '%Ива%' AND
surname Like '%Никол%' or name Like '%Никол%' or secondname Like '%Никол%'


Но возвращаются записи:
1 | Иванов | Николай | Олегович
2 | Иванов | Сергей | Кириллович
4 | Самсонов | Николай | Иванович

В идеале мне все это необходимо реализовать в Doctrine ORM, но мне необходимо сейчас хотя бы понять как это выглядит на нативном SQL.
  • Вопрос задан
  • 680 просмотров
Решения вопроса 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
Нужно ставить скобки:
SELECT * from 'Клиенты' 
  WHERE (surname Like '%Ива%' or name Like '%Ива%' or secondname Like '%Ива%') 
    AND (surname Like '%Никол%' or name Like '%Никол%' or secondname Like '%Никол%')

Можно использовать соединение:
SELECT * from 'Клиенты' 
  WHERE CONCAT_WS(',' surname, name, secondname) LIKE '%Ива%'
    AND CONCAT_WS(',' surname, name, secondname) LIKE'%Никол%'
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
если это для серьезного а не хобби - такая задача решается не так, а Full Text Search

дальше: запросы вида like %query% не используют индекс, в отличие от like query%, старайся их избегать

дальше можно выучить функцию CONCAT()
ну там
WHERE CONCAT(surname," ", name," ", secondname) like '%Ива%'

и уже , ее освоив, правильно написать твой последний запрос like "%Ива%Никол%"

повторюсь - для серьезного юзай FTS
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы