2015-03-30 2 views
1

Мой запрос:Как я сократить множественные ЛЮБИТ

SELECT * 
FROM tbl 
WHERE (
    col LIKE '%this%' AND 
    col LIKE '%that%' AND 
    col LIKE '%something else%' 
) 

Струны Я ищу не в предсказуемом порядке.

Есть ли способ написать это без всех этих LIKE строк?

+2

Если слова появляются в определенном/последовательном порядке, вы можете попробовать '% this%, что% something else%', в противном случае: нет, вы не могли бы сократить это, кроме перехода на полнотекстовый индекс, позволяющий пропустить подстановочный бизнес. '% ..%' являются абсолютным дерьмом для производительности поиска - вы не можете использовать индексы, и каждый запрос должен выполнять полное сканирование таблицы. –

ответ

3

Вместо этого:

WHERE col LIKE '%this%' AND col LIKE '%that%' AND col like '%something else%' 

вы можете попробовать это для более быстрый способ:

WHERE col REGEXP 'this|that|somethingelse' 

, но следует помнить, что это только в том случае, если существует определенный шаблон еще я не думаю, что это может быть сокращено.

EDIT: -

Как ваш обновленный вопрос говорит, если строки, которые вы ищете не в предсказуемом порядке, то я не думаю, что есть какой-нибудь способ, чтобы сократить ваш LIKE заявления. Вы должны использовать его так же, как вы его используете прямо сейчас.

+0

Хм, слишком плохо, что нет возможности сократить это утверждение, но, по крайней мере, теперь я знаю. –

+0

OP хочет, чтобы записи соответствовали всем 3 подобным заявлениям. Используя 'this | that | somethingelse', вы получаете строки, соответствующие хотя бы одному из них. – 1010

 Смежные вопросы

  • Нет связанных вопросов^_^