当搜索具有非字母数字字符的部分时,我很难弄清楚如何在SQL数据库上实现搜索。
除非在要搜索的零件号中有连字符或圆括号之类的字符,否则搜索效果很好。(有些零件号有正斜杠,但查询时会正确返回。(
例如:搜索1492-PDL3111返回0个结果。(部分字符串搜索效果很好,所以如果我搜索1492,我会得到1492-PDL3111零件号以及1492-PDL1124、1492-PDL3141,这很好,但如果我包括连字符,我会返回0结果。当我从字符串的中间或结尾进行部分字符串搜索时,我也会得到正确的结果。唯一的失败是当我搜索具有非-数字字符。
我粘贴下面的代码,希望这里有人能提供帮助。我一直在寻找解决方案,但都无济于事。
提前感谢!Thymalus
<?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>';
}
?>
执行以下操作时,将从搜索字符串中删除连字符和空格:
$searchcross=str_replace($remove, "", $searchcross);
如果要在搜索时忽略这些字符,还需要将它们从表中的字符串中删除。因此查询中的条件应该是:
WHERE REPLACE(REPLACE(competitor_part_no, '-', ''), ' ', '') LIKE :part_no
感谢您的输入。空格和连字符实际上是从该数组中删除的:$remove=数组(","-"(;这不是我们想要的,当我再次查看他们的代码时,我发现了这个问题。我删除了那行代码,它运行得很好。