У меня есть db с двумя столбцами: имя и фамилия. Первое имя может иметь несколько слов. Фамилия может содержать переносимые слова.
Есть ли способ поиска в обоих столбцах только с одним полем ввода?
База данных
ID `First Name` `Last Name`
1 John Peter Doe
2 John Fubar
3 Michael Doe
Поиск
john peter возвращает id 1
john возвращает id 1,2
doe возвращает id 1,3
john doe возвращает id 1
peter john возвращает id 1
peter doe возвращает id 1
doe john возвращает id 1
Я ранее пробовал следующее. Поиск John Doe
:
SELECT * FROM names WHERE (
`first` LIKE '%john%' OR
`first` LIKE '%doe%' OR
`last` LIKE '%john%' OR
`last` LIKE '%doe%'
)
который возвращает как 1, так и 3
Требуется корреляция между именем и фамилией.
Для двух слов (w1, w2) условие
( first LIKE "%w1%" AND last LIKE "%w2%" ) OR ( first LIKE "%w2%" AND last LIKE "%w1%" )
Значение, w1 должно быть от имени и w2 в имени,
ИЛИ w2 должно иметь имя И w1 в фамилии.
Таким образом, у John Doe будет выбран ID 1.
Вы можете разделить имя пользователя "слова" пробелом и получить последний элемент массива, который должен быть его фамилией. Затем вы должны запросить SQL как "Nanne", или вы можете использовать поиск по тегам.
Удачи.
Я не знаю, что вы спрашиваете точно, но не имеете в виду именно это?
WHERE (`first name` LIKE '%searchString%' OR `last name` LIKE '%searchString%')
Как вы отмечаете, если какое-либо из слов может быть в любом столбце (и должны ли они присутствовать хотя бы один раз? или если это лучше всего подходит, значит, другой порядок означает что-нибудь), тогда вам придется что-то делать больше, но вам действительно нужно сначала подумать о некоторых характеристиках:)
Коротким решением будет поиск последнего пробела ввода с помощью preg_match или что-то в этом роде (на самом деле он не может запомнить правильную функцию прямо сейчас), а затем использовать это как маркер. Сохраните все после маркера в фамилии "searchstring" и все, что перед ним, с именем "searchstring".
Очевидным недостатком этого решения было бы, если бы у человека было 2 слова для фамилии. Но я не уверен, что вы/принимаете/принимаете 2 фамилии или нет. Итак, позвольте мне процитировать Нанну здесь:
вы должны уточнить свой вопрос: бит, тебе не кажется? что может быть поиск, что находится в столбцах и т.д. и т.д.