2010-03-25 2 views
25

Я пытаюсь создать функцию поиска, которая будет искать несколько столбцов, чтобы найти соответствие по ключевому слову. Этот запрос:Как искать несколько столбцов в MySQL?

SELECT title FROM pages LIKE %$query%; 

работает только для поиска одну колонки, я заметил, отделяя имена столбцов с запятые приводит к ошибке. Так можно ли искать несколько столбцов в mysql?

ответ

30

Вы можете использовать операторы AND или OR, в зависимости от того, что вы хотите, чтобы поиск возвращался.

SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%; 

Оба предложения должны соответствовать записи, подлежащей возврату. Альтернативно:

SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%; 

Если какое-либо предложение совпадает, запись будет возвращена.

Для получения дополнительных сведений о том, что вы можете делать с запросами MySQL SELECT, попробуйте использовать documentation.

+0

Какие параметры имеют одинаковое значение? Скажем, вы ищете, находится ли «Стивен» в первом или последнем имени пользователя? (Учитывая, что пользователи являются таблицей, last_name и first_name являются столбцами.) – onebree

+1

@HunterStevens В этом случае см. [Этот другой ответ на этот вопрос] (http://stackoverflow.com/a/30365428/2908724). – bishop

12

Если ваша таблица MyISAM:

SELECT * 
FROM pages 
WHERE MATCH(title, content) AGAINST ('keyword' IN BOOLEAN MODE) 

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

CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content) 

, но будет работать даже без индекса.

+2

Это хорошо, но он работает только на точных совпадений, поиск собак не возвращает страницу под названием собаку. – George

+1

Нет, вы можете использовать подстановочный знак «собака» для соответствия «собакам» и «собаке». хотя вы не можете использовать '* dog' для получения «adog». Поддерживаются только дополнительные шаблоны. – DavidLin

33

Если это просто для поиска, вы можете использовать CONCATENATE_WS. Это позволит проводить поиск по диким картам. Возможны проблемы с производительностью в зависимости от размера таблицы.

SELECT * 
FROM pages 
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%' 
+1

Ха! Наткнулся на это. Аккуратный маленький трюк. Благодаря! – raupach

+1

Будьте внимательны при подключении к CONCAT -https: //www.percona.com/blog/2007/10/16/be-careful-when-joining-on-concat/ – londox

-1
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%'); 

Пожалуйста, попробуйте с выше запроса.

1

1)

select * 
from employee em 
where CONCAT(em.firstname, ' ', em.lastname) like '%parth pa%'; 

2)

select * 
from employee em 
where CONCAT_ws('-', em.firstname, em.lastname) like '%parth-pa%'; 

-первых, это полезно, когда у нас есть данные, такие как: 'Имя Фамилия'.

например

  • Parth Патель
  • Parth р
  • Патель Parth

Во-вторых, полезно, когда у нас есть данные, такие как: "FirstName-Lastname. В нем вы также можете использовать специальные символы.

e.г

  • Parth-Патель
  • parth_p
  • Патель # Parth
Смежные вопросы