/ / Пошук по імені за кількома полями - php, mysql, sql

Пошук за назвою через декілька полів - php, mysql, sql

У мене є таблиця, яка крім іншої інформації містить імена. Я хочу шукати ім’я та отримати поле "unique_id".

Поля, які могли б містити ім’я (або його частина):

f_name1, l_name1, f_name2, l_name2, prop_name

Тепер скажімо, що база даних містить цей запис:

unqiue_id = 1,
f_name1   = "Barack",
l_name1   = "Obama",
f_name2   = "Michelle",
l_name2   = "Obama",
prop_name = "White House",
...

і у мене ця рядок наведений у php:

$q = "Barack Obama"; //or "Michelle" or "White House" or ...

Що "sql", щоб отримати "unqiue_id" з цього ряду?

SELECT unique_id FROM members WHERE (?)

Однією з мене була ідея вибухнути ("", $ q) і використатиПОДОБАЮТЬ "% ...%" на все і якось рахувати кількість істинних умов, а потім ЗАМОВИТИ це, але я не знаю, чи можливо це, як це зробити в SQL.

Edit1:

Я придумав це рішення завдяки коментарю "PM 77-1":

SELECT unique_id
FROM members
WHERE CONCAT( f_name1, l_name1, f_name2, l_name2, prop_name ) LIKE "%Barack%Obama%"

(заміна пробілів на "%" у php)

Однак це працює лише в тому випадку, якщо рядок введення в правильному порядку ...

Відповіді:

1 для відповіді № 1

Ви можете спробувати це:

select t.*
from table t
where $p like concat("%", f_name1, "%") or
$p like concat("%", l_name1, "%") or
$p like concat("%", f_name2, "%") or
$p like concat("%", l_name2, "%") or
$p like concat("%", prop_name, "%")
order by (($p like concat("%", f_name1, "%") ) +
($p like concat("%", l_name1, "%") ) +
($p like concat("%", f_name2, "%") ) +
($p like concat("%", l_name2, "%") ) +
($p like concat("%", prop_name, "%") ) desc;

Це вирішує проблему, як описано в питанні. Але, можливо, вам краще, якщо ви знайдете повний пошук тексту. Місце, з якого слід почати дізнаватися про це документація.