У мене є таблиця, яка крім іншої інформації містить імена. Я хочу шукати ім’я та отримати поле "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;
Це вирішує проблему, як описано в питанні. Але, можливо, вам краще, якщо ви знайдете повний пошук тексту. Місце, з якого слід почати дізнаватися про це документація.