Проблемы с поиском не буквенно-цифровых символов при использовании базы данных PHP и SQL - PullRequest
0 голосов
/ 15 декабря 2018

У меня возникают проблемы с выяснением того, как реализовать поиск по базе данных SQL при поиске деталей с не алфавитно-цифровыми символами.

Поиск работает отлично, за исключением случаев, когда есть такой символ, как дефис,или скобки в искомом номере детали.(Некоторые номера деталей имеют косую черту, но при запросе они возвращаются должным образом.)

Например: поиск 1492-PDL3111 возвращает 0 результатов.(Частичный поиск строки работает хорошо, поэтому, если я ищу 1492, я получу номер детали 1492-PDL3111, возвращенный вместе с 1492-PDL31124, 1492-PDL3141, 1492-PDL3161, что замечательно, но если я включу дефис, я 'm обратно к 0 результатам. Я также получаю правильные результаты, когда выполняю частичный поиск строки из середины или конца строки. Единственная ошибка - это когда я выполняю поиск номера детали, который имеет нечисловые символы.

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

Заранее спасибо! Thymallus

<?php 
$searchcross=$_GET[ 'crossref']; 
$remove=array( " ", "-"); 
$searchcross=str_replace($remove, "", $searchcross); 
if ($searchcross !="" ){ 
$query=$handler->prepare("SELECT * FROM php_cross_reference WHERE competitor_part_no LIKE :part_no ORDER BY competitor_part_no;"); 


$query->bindValue(':part_no', '%' . $searchcross . '%');   
$query->execute(); 
if ($query->rowCount()){ ?>

<!--If statement, only make this if there are results?-->
<div class="table-section">
  <table class="search-table search-table-alt">
    <caption>
      <?php echo 'Search results for "'. $searchcross . '"' ?>
    </caption>
    <tr>
      <th>Competitor Part Number</th>
      <th>Competitor</th>
      <th>Our Part Number</th>
    </tr>

    <!--This is where the PHP loop should begin-->
    <?php 
      while ($r=$query->fetch(PDO::FETCH_ASSOC)){ 
    ?>

    <tr>
      <td>
        <?php 
          echo '<strong>',$r[ 'competitor_part_no'], '</strong>' 
        ?>
      </td>
      <td>
        <?php 
          if ($r[ 'competitor_name']){ 
            echo $r[ 'competitor_name']; 
          } else { 
            echo 'N/A'; 
          } 
        ?>
      </td>
      <td>
        <?php 
          if ($r[ 'product_documentation']){ 
            echo '<strong><a href="',$r[ 'product_documentation'], '">',$r[ 'our_part_no'], '</a></strong>'; 
          } else { 
            echo '<strong>',$r[ 'our_part_no'], '</strong>'; 
          } ;?>
      </td>

      <?php 
        } 
        //PHP loop end 
      ?>
  </table>
</div>

<!--  PHP if statement end?-->
<?php 
    } else { 
      echo '<h3 class="module">Your search returned '.$query->rowCount().' results.</h3>'; 
    } 
  } else { 
    echo '<h3 class="module">please enter a search</h3>'; 
  } 
?>

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Спасибо за ввод.Пробелы и дефисы фактически удалялись из этого массива: $ remove = array ("", "-");Это не то, что было нужно, и как только я снова посмотрел на их код, я увидел проблему.Я удалил эту строку кода, и она отлично работает.

0 голосов
/ 15 декабря 2018

Вы удаляете дефисы и пробелы из строки поиска, когда делаете:

$searchcross=str_replace($remove, "", $searchcross); 

Если вы хотите игнорировать эти символы при поиске, вам также необходимо удалить их из строк в таблице.Таким образом, условие в запросе должно быть:

WHERE REPLACE(REPLACE(competitor_part_no, '-', ''), ' ', '') LIKE :part_no
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...