Поиск 2 столбцов с 1 полем ввода - PullRequest
0 голосов
/ 15 января 2011

У меня есть БД с двумя столбцами: имя и фамилия .Имя может содержать несколько слов.Фамилия может содержать дефисные слова.

Есть ли способ поиска в обоих столбцах только с одним полем ввода?

База данных

ID        `First Name`       `Last Name`
1          John Peter         Doe
2          John               Fubar
3          Michael            Doe

Поиск

Джон Питер возвращает идентификатор 1
Джон возвращает идентификатор 1,2
Доу возвращает идентификатор1,3
Джон Доу возвращает идентификатор 1
Питер Джон возвращает идентификатор 1
Питер Доу возвращает идентификатор 1
Доу Джон возвращает идентификатор 1

Я ранее пробовал следующее.Поиск John Doe:

SELECT * FROM names WHERE (
  `first` LIKE '%john%' OR
  `first` LIKE '%doe%' OR
  `last` LIKE '%john%' OR
  `last` LIKE '%doe%'

)

, который возвращает 1 и 3

Ответы [ 4 ]

1 голос
/ 15 января 2011

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

Для двух слов (w1, w2) условие

( first LIKE "%w1%" AND last LIKE "%w2%" ) OR ( first LIKE "%w2%" AND last LIKE "%w1%" )

Значение, w1 должно быть в имени И w2 в фамилии
ИЛИ w2 должно быть в имени И w1 в фамилии.

Таким образом, Джон Доу выберет ID 1.

1 голос
/ 15 января 2011

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

Удачи.

0 голосов
/ 15 января 2011

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

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

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

0 голосов
/ 15 января 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...