MySql LIKE возвращает false, если условие поиска совпадает со всей строкой в ​​столбце, почему это так? - PullRequest
0 голосов
/ 11 августа 2011

Таким образом, у меня есть следующее как часть моего запроса

SELECT * FROM $table WHERE columname LIKE '%$searchterm%'

Я пытался удалить начальные и / или конечные символы подстановки, означающие

SELECT * FROM $table WHERE columname LIKE '$searchterm%'

И

SELECT * FROM $table WHERE columname LIKE '%$searchterm'

И

SELECT * FROM $table WHERE columname LIKE '%$searchterm%' OR columname LIKE '$searchterm'

, а также безуспешно пытался добавить в запрос подписку

OR columname = '$searchterm'

Так, когда мой поисковый термин "myval" и если в столбце есть вся строка "myval", я бы хотел, чтобы это было выделено. Но ВСЕ мои запросы выше возвращают false / ничего не возвращают, где myval - это searchterm и значение столбца как полное.

Я не могу использовать MATCH, потому что это не полнотекстовый индекс.

EDIT:

PHP код:

    $sterm = NULL;
            $table = 'mytable';

    if(isset($_GET['s'])) {     $sterm = explode(" ", mysql_real_escape_string($_GET['s']));    }

    if(isset($_POST['s'])) {    $sterm = explode(" ", mysql_real_escape_string($_POST['s']));   }

    if(!empty($sterm)){
        $getdata = "SELECT * FROM $table WHERE termsi != 'Special' "; 

        foreach ($sterm as $value){

            $getdata .= "AND netid_all  LIKE '%$value%' OR  netid_all  = '$value' ";                
        } //End foreach

        $getdata .= "LIMIT 10";

        $result = mysql_query($getdata) or die(mysql_error());
        $row = mysql_fetch_array($result, MYSQL_ASSOC);

        while($row = mysql_fetch_array($result, MYSQL_ASSOC))
        {
            echo <<<PRINTALL
            {$row[0]}, {$row[1]}, {$row[2]}, {$row[3]}, {$row[4]}, {$row[5]}, {$row[6]}, {$row[7]}, ' <br />'               
PRINTALL;
        } //End While
    } //End If search exists

Хорошо. Итак, как вы, ребята, предложили, я попробовал консоль PHPMyAdmin sql, и она работает нормально, так что это должно быть с помощью PHP !? так что вот оно.

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Хорошо нашел это,

$row = mysql_fetch_array($result, MYSQL_ASSOC);

    while($row = mysql_fetch_array($result, MYSQL_ASSOC))

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

$row = mysql_fetch_array($result, MYSQL_ASSOC);

    while($row)
0 голосов
/ 11 августа 2011

Я бы предложил написать ваше построение запроса так:

$fullvalues = array();
$partials = array();
foreach ($sterm as $value){
   $partials[] = "(netid_all LIKE '%" . mysql_real_escape_string($value) . "%')";
   $fullvalues[] = "'" .  mysql_real_escape_string($value) . "'";
}
$partials = implode(' OR ', $partials);
$fullvalues = implode(', ', $fullvalues);

$sql = <<<EOL
SELECT *
FROM $table
WHERE (termsi != 'Special')
   AND (($partials) OR (netid_all IN ($fullvalues));
EOL;

Если ваша поисковая строка a b c, вы получите этот запрос:

SELECT *
FROM yourtable
WHERE (termsi != 'Special')
   AND (((netid_all LIKE '%a%') OR (netid_all LIKE '%b%') OR (netid_all LIKE '%C%')) OR (netid_all IN ('a', 'b', 'c')))

Если ваш поиск требует присутствия всех терминов, измените 'ИЛИ' на 'И' на имплозе.

...