SQL如何最小化查询?

时间:2014-02-17 15:04:02

标签: sql sql-server sql-server-2008

美好的一天。

表有行:

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中)。如果可能,我想将所有这些条件分组。

2 个答案:

答案 0 :(得分:2)

name LIKE '%word%'将获取“word”,“word second”,“second word”和“one word three”。 因此,请删除LIKE中的冗余 - 这应该会使LIKE至少减少一半。

答案 1 :(得分:-2)

我认为你可以使用循环变量数组来做到这一点:

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

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

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

请注意,我们在循环

之前使用了查询第一部分中的第一个变量