MySQL Multi Field Search, используя предложение Like - PullRequest
0 голосов
/ 19 декабря 2011

Я пытаюсь выполнить поиск по нескольким полям, используя предложение Like в MySQL, и я не могу получить никаких результатов. Вот запрос, который я использую:

SELECT player_id, 1st_name, last_name, birth_date, nationality, pasition 
FROM `people` 
WHERE player_id  LIKE '%Keyword%' 
  OR 1st_name    LIKE '%Keyword%' 
  OR last_name   LIKE '%Keyword%' 
  OR birth_date  LIKE '%Keyword%' 
  OR nationality LIKE '%Keyword%'
  OR pasition    LIKE '%Keyword%' 
ORDER BY `people`.`1st_name` ASC LIMIT 0 , 60

Ключевое слово - переменная, переданная php.

1 Ответ

1 голос
/ 19 декабря 2011

Для этого вы должны использовать индекс FULLTEXT.Вы можете искать в нескольких столбцах, и он будет работать в сотни или тысячи раз быстрее, чем при использовании LIKE с подстановочными знаками.

CREATE FULLTEXT INDEX ft_people ON `people` 
  (player_id, `1st_name`, last_name, birth_date, nationality, position);

SELECT player_id, 1st_name, last_name, birth_date, nationality, pasition 
FROM `people` 
WHERE MATCH(player_id, `1st_name`, last_name, birth_date, nationality, position) 
  AGAINST('+Keyword' IN BOOLEAN MODE) 
ORDER BY `people`.`1st_name` ASC LIMIT 0 , 60

См. http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

Обратите внимание, что в MySQL до5.6, индексы FULLTEXT поддерживаются только в механизме хранения MyISAM.

...