2014-02-17 5 views
0

Добрый день.SQL Как свести к минимуму запрос?

Таблицы есть строка:

name 

стоматолог 
стоматолога 
стоматологом 
врач стоматолог 
врача стоматолога 
врач-стоматолог 
врача-стоматолога 
врача стоматолога-терапевта 
врача-стоматолога$ 
врача-стоматолога$1 
врача-стоматолога-терапевта$ 
врача-стоматолога-терапевта$1 
врачом-стоматологом 
врачом стоматологом-терапевтом 
врачом-стоматологом-терапевтом 
КОНСУЛЬТАЦИЯ (ПРИЕМ) ВРАЧА-СТОМАТОЛОГА БЕСПЛАТНАЯ 
УСЛУГИ СТОМАТОЛОГИЧЕСКИЕ ХИРУРГ-СТОМАТОЛОГ 
КОНСУЛЬТАЦИЯ (ПРИЕМ) ВРАЧА-СТОМАТОЛОГА-ХИРУРГА 
КОНСУЛЬТАЦИЯ (ПРИЕМ) ВРАЧА-СТОМАТОЛОГА 
КОНСУЛЬТАЦИЯ (ПРИЕМ) ВРАЧА-СТОМАТОЛОГА-ХИРУРГА 
КОНСУЛЬТАЦИЯ (ПРИЕМ) ВРАЧА-СТОМАТОЛОГА 
КОНСУЛЬТАЦИЯ (ПРИЕМ) ВРАЧА-СТОМАТОЛОГА ДЕТСКОГО БЕСПЛАТНАЯ ВСЕ ВИДЫ 

Я использую следующий запрос:

... 
WHERE name LIKE 'стоматолог' 
    OR name LIKE 'стоматолог[$-()/ ]' 
    OR name LIKE 'стоматолог[$-()/ ]%' 
    OR name LIKE 'стоматолог[аеёиоуыэюяъь]' 
    OR name LIKE 'стоматолог[аеёиоуыэюяъь][$-()/ ]%' 
    OR name LIKE 'стоматолог[аеёиоуыэюяъь][йюм$-()/ ]' 
    OR name LIKE 'стоматолог[аеёиоуыэюяъь][йюм$-()/ ]%' 

    OR name LIKE '[$-()/ ]стоматолог' 
    OR name LIKE '[$-()/ ]стоматолог[аеёиоуыэюяъь]' 
    OR name LIKE '[$-()/ ]стоматолог[аеёиоуыэюяъь][йюм$-()/ ]' 
    OR name LIKE '[$-()/ ]стоматолог[аеёиоуыэюяъь][йюм$-()/ ]%' 

    OR name LIKE '%[$-()/ ]стоматолог' 
    OR name LIKE '%[$-()/ ]стоматолог[аеёиоуыэюяъь]' 
    OR name LIKE '%[$-()/ ]стоматолог[аеёиоуыэюяъь][йюм$-()/ ]' 
    OR name LIKE '%[$-()/ ]стоматолог[аеёиоуыэюяъь][йюм$-()/ ]%' 

    OR name LIKE '%[$-()/ ]стоматолог[$-()/ ]%' 
    OR name LIKE '%[$-()/ ]стоматолог[аеёиоуыэюяъь][$-()/ ]%' 
    OR name LIKE '%[$-()/ ]стоматолог[аеёиоуыэюяъь][йюм$-()/ ][$-()/ ]%' 

Скажите, пожалуйста, как минимизировать этот запрос и на самом деле это?

P.S .: теперь у нас есть 17 условий в запросе (в where). Я хотел бы сгруппировать все эти условия, если это возможно.

+1

Чего вы хотите достичь? – Alexander

+0

@Alexander теперь у нас есть 17 условий в запросе (в 'where'). Я хотел бы сгруппировать все эти условия, если это возможно. –

+0

Я думаю, что сначала вы должны прокомментировать все ваши условия, а затем раскомментировать их один за другим. Например, ИЛИ имя LIKE 'стоматолог [$ -() /]' ИЛИ имя LIKE 'стоматолог [$ -() /]%' вернется такое же количество строк. так что 'стоматолог [$ -() /]' не требуется. и так далее. – KumarHarsh

ответ

-2

Я думаю, что вы можете сделать это, используя цикл по массиву переменных:

$column = 'p.name' 
$variables = array('стоматолог[$-()/ ]','стоматолог[$-()/ ]',....); 

$query= "WHERE {$column} LIKE '%стоматолог%' "; 

foreach($variables as $variable) 
{ 
    $query .= "OR {$column} LIKE '%{$variable}%' "; 
} 

Обратите внимание, что мы использовали первую переменную в первом partt запроса перед циклом

2

name LIKE '%word%' будет получать «слово «второе слово», «второе слово» и «одно слово три». Итак, удалите избыточность у вас LIKE s - это должно уменьшить ваш LIKE с не менее половины.

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