Поиск 2 полей одновременно - PullRequest
2 голосов
/ 24 мая 2010

У меня есть таблица имен и фамилий

firstname    lastname
---------    ---------
Joe          Robertson
Sally        Robert
Jim          Green
Sandra       Jordan

Я пытаюсь найти эту таблицу на основе ввода, которое состоит из полного имени. Например:

input: Joe Robert

Я думал об использовании

SELECT * FROM tablename WHERE firstname LIKE

НО таблица хранит имя и фамилию отдельно, поэтому я не уверен, как сделать поиск в этом случае

Ответы [ 2 ]

4 голосов
/ 24 мая 2010

В MyISAM:

SELECT  *
FROM    mytable
WHERE   MATCH(firstname, lastname) AGAINST ("Joe* Robert*" IN BOOLEAN MODE);

Это будет работать намного быстрее, если вы создадите индекс FULLTEXT:

CREATE FULLTEXT INDEX ON mytable (firstname, lastname)

Чтобы запрос мог искать короткие имена (например, Joe в вашем случае), вам нужно установить переменную @@ft_min_word_len в 1 до создания индекса.

В InnoDB вам нужно разделить строку поиска:

SELECT  *
FROM    mytable
WHERE   firstname LIKE 'Joe%'
        AND lastname LIKE 'Robert%'
2 голосов
/ 24 мая 2010

Альтернатива методу Кассного:

SELECT  *
FROM    mytable
WHERE   CONCAT(firstname, " ", lastname) = "Joe Robert"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...