2012-03-01 2 views
-2

У меня есть строка запроса строится и она отлично работает, когда я использую LIKE, но он не будет работать с NOT LIKEPHP - MySQL запрос не работает при использовании НЕ НРАВИТСЯ

$sWhere = ""; 
    if ($_GET['sSearch'] != "") 
    { 

      $aWords = preg_split('/\s+/', $_GET['sSearch']); 
      $sWhere = "WHERE ("; 

      for ($j=0 ; $j<count($aWords) ; $j++) 
      { 
        if ($aWords[$j] != "") 
        { 
          if(substr($aWords[$j], 0, 1) == "!"){ 
            $notString = substr($aWords[$j], 1); 
            $sWhere .= "("; 
            for ($i=0 ; $i<count($aColumns) ; $i++) 
            { 
              $sWhere .= $aColumns[$i]." NOT LIKE '%".mysql_real_escape_string($notString)."%' OR "; 
            } 
          } 
          else{ 
            $sWhere .= "("; 
            for ($i=0 ; $i<count($aColumns) ; $i++) 
            { 
              $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($aWords[$j])."%' OR "; 
            } 
          } 
          $sWhere = substr_replace($sWhere, "", -3); 
          $sWhere .= ") AND "; 
        } 
      } 
      $sWhere = substr_replace($sWhere, "", -4); 

часть кода, который делает работа:

if(substr($aWords[$j], 0, 1) == "!"){ 
            $notString = substr($aWords[$j], 1); 
            $sWhere .= "("; 
            for ($i=0 ; $i<count($aColumns) ; $i++) 
            { 
              $sWhere .= $aColumns[$i]." NOT LIKE '%".mysql_real_escape_string($notString)."%' OR "; 
            } 
          } 

Если я удалю «NOT», запрос работает нормально, но он ничего не делает, когда я добавляю NOT.

благодаря

+0

Объяснение 'ничего не делает'. Очевидно, когда вы используете 'NOT LIKE' вместо' LIKE', вы получаете только противоположный результат – zerkms

+2

Помогает ли это сообщение? http://stackoverflow.com/questions/1638566/sql-not-like-statement-not-working – Donovan

+1

Я вижу много кода, но не одного запроса. Довольно странно для вопроса MySQL ... –

ответ

2

Это потому, что вы используете OR в вашем НЕ НРАВИТСЯ состояние.

Поиск всех строк, где column1 NOT LIKE "a" ИЛИ column2 NOT LIKE "a" будет соответствовать всем.

+0

, вы говорите, что я использую AND? – waa1990

+0

Да; чтобы изменить его значение, вам нужно сделать «НЕ НРАВИТСЯ x И НЕ НРАВИТСЯ y». – halfer

+0

Немного о [закон Де Моргана] (http://en.wikipedia.org/wiki/De_Morgan's_laws) может помочь – Mikhail

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