当查找具有非字母数字字符的部分时,我很难弄清楚如何在SQL db上实现搜索。
搜索非常有效,除非要搜索的字符中有连字符(例如连字符)或括号。 (某些零件号带有正斜杠,但在查询时会正确返回。)
例如:搜索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>';
}
?>
答案 0 :(得分:0)
这样做时,您要从搜索字符串中删除连字符和空格:
$searchcross=str_replace($remove, "", $searchcross);
如果要在搜索时忽略这些字符,则还需要从表中的字符串中删除它们。因此查询中的条件应为:
WHERE REPLACE(REPLACE(competitor_part_no, '-', ''), ' ', '') LIKE :part_no
答案 1 :(得分:0)
感谢您的输入。实际上已从此数组中删除了空格和连字符: $ remove = array(“”,“-”); 那不是期望的,一旦我再次查看他们的代码,我就看到了问题。 我删除了那行代码,它运行完美。