Поиск 2 столбцов с 1 полем ввода

0

У меня есть 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

Теги:
select
search

4 ответа

1
Лучший ответ

Требуется корреляция между именем и фамилией.

Для двух слов (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.

1

Вы можете разделить имя пользователя "слова" пробелом и получить последний элемент массива, который должен быть его фамилией. Затем вы должны запросить SQL как "Nanne", или вы можете использовать поиск по тегам.

Удачи.

0

Я не знаю, что вы спрашиваете точно, но не имеете в виду именно это?

WHERE (`first name` LIKE '%searchString%' OR `last name` LIKE '%searchString%')

Как вы отмечаете, если какое-либо из слов может быть в любом столбце (и должны ли они присутствовать хотя бы один раз? или если это лучше всего подходит, значит, другой порядок означает что-нибудь), тогда вам придется что-то делать больше, но вам действительно нужно сначала подумать о некоторых характеристиках:)

  • 0
    Нет, если у меня есть Джон Питер Доу с Джоном Питером в качестве имени и Доу в качестве фамилии, поиск «Джон Доу» ничего не даст.
  • 0
    Да, действительно, если вы хотите , чтобы это было возможно, вы должны немного прояснить свой вопрос, не так ли? что можно искать, что в столбцах и т. д. и т. д.
Показать ещё 1 комментарий
0

Коротким решением будет поиск последнего пробела ввода с помощью preg_match или что-то в этом роде (на самом деле он не может запомнить правильную функцию прямо сейчас), а затем использовать это как маркер. Сохраните все после маркера в фамилии "searchstring" и все, что перед ним, с именем "searchstring".

Очевидным недостатком этого решения было бы, если бы у человека было 2 слова для фамилии. Но я не уверен, что вы/принимаете/принимаете 2 фамилии или нет. Итак, позвольте мне процитировать Нанну здесь:

вы должны уточнить свой вопрос: бит, тебе не кажется? что может быть поиск, что находится в столбцах и т.д. и т.д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню