sql / mysql поиск в одном поле по двум ключевым словам - PullRequest
3 голосов
/ 03 февраля 2012

вот что у меня есть:

SELECT `id`, `names` FROM `screenplays` WHERE `names` LIKE '%joe%mike%'

имена полей содержат:

row1: joe
row2: mike
row3: joe,mike

как мне вернуть все 3 строки в результате?

Ответы [ 3 ]

3 голосов
/ 03 февраля 2012

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

SELECT `id`, `names` FROM `screenplays` WHERE `names` REGEX 'joe|mike'

Чтобы учесть имена, разделенные запятыми, а также пробелы, используйте более сложное регулярное выражение:

SELECT `id`, `names` FROM `screenplays` WHERE `names` REGEX '(^|,) *(joe|mike) *($|,)'

Который разбивается на:

(^|,)       # begin at start of line, or after a comma
 *          # ignore any spaces
(joe|mike)  # names to match
 *          # ignore any spaces
($|,)       # ends at end of line or a comma

См. Справочная страница MySQL для REGEX

3 голосов
/ 03 февраля 2012

Используйте

SELECT `id`, `names` 
FROM `screenplays` 
WHERE `names` LIKE '%joe%' 
    OR `names` LIKE '%mike%'

Если имена разделены запятой, и вам не нужны имена, такие как joey, при указании joe, вы можете расширить запрос следующим образом:

SELECT `id`, `names` 
FROM `screenplays` 
WHERE `names` LIKE 'joe'
    OR `names` LIKE '%,joe'
    OR `names` LIKE 'joe,%'
    OR `names` LIKE '%,joe,%'

и аналогично для каждого ключевого слова

2 голосов
/ 03 февраля 2012
SELECT `id`, `names` FROM `screenplays` 
WHERE concat(',', `names`, ',') LIKE '%,mike,%' or concat(',', `names`, ',') LIKE '%,joe,%'

Добавление запятой в names предотвращает возврат carlton при поиске carl.

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