可以处理缺少字符的MySQL查询

时间:2015-02-14 12:58:56

标签: php mysql misspelling

我正在尝试改进我的MySQL查询。

    SELECT gamename
    FROM giveaway
    WHERE gamename LIKE '$query'

我得到了一个由URL组成的输入,其形式如下:

我从URL中获取游戏名称,并将其用作SQL查询的输入。

  • $ query =“plain sight”
  • $ query =“tex murphy martian memorandum”
  • $ query =“flyn”
  • $ query =“penguins arena sednas world”

现在在数据库中,匹配名称有时会包含更多字符:'!等等。

示例:

  • “平原视线”
  • “Tex Murphy:Martian Memorandum”
  • “Fly'N”
  • “企鹅竞技场:塞德娜的世界!”

因此,当从URL中输入获取的名称时,这不会产生第2,第3和第4个示例的结果。 所以我所做的是使用%字符。

  • $ query =“plain%sight”
  • $ query =“tex%murphy%martian%memorandum”
  • $ query =“flyn”
  • $ query =“penguins%arena%sednas%world”

现在给出第1和第2个例子的结果。

关于我的问题:

我的问题是,如何更好地改进这一点,以便第3和第4个工作?

我正在考虑在每个角色之前和之后添加额外的%:

  • $ query =“%f%l%y%n%”
  • $ query =“%p%e%n%g%u%i%n%s%a%r%e%n%a%s%e%d%n%a%s%w%o% R%1%d%“

但我不确定这会如何改善性能,如果这是最好的解决方案。

添加%是一个好的解决方案吗?

有关如何进行良好工作查询的其他任何提示?

进度:

经过一些测试后,我发现添加大量通配符(%)并不是一个好主意。您将从数据库中返回意外结果,原因很简单,因为您刚刚添加了很多可以匹配的方法。

使用slug方法似乎是唯一的选择。

1 个答案:

答案 0 :(得分:-1)

如果我能很好地回答您的问题,那么您正在创建一种搜索这些信息的方法。如果是这种情况,请尝试

$query = addslashes($query);


SELECT name
    FROM giveaway
    WHERE gamename LIKE '%$query%'

现在,如果您想要扩大搜索范围并搜索每个单词,这些单词看起来像是字符串中的单词,那么您可以通过

来分解文本并搜索每个单词。
<?php
$query = addslashes($query);

//We explode the query into a table
$tableau=explode(' ',$query);

$compter_tableau=count($tableau);

//We prepare the query
$req_search = "SELECT name FROM giveaway WHERE  ";

//we add the percentage sign and the combine each query 
for ($i = 0; $i < $compter_tableau; $i++) 
{
$notremotchercher=$tableau["$i"];

if($i==$compter_tableau) { $liaison="AND"; } else { $liaison=""; }

if($i!=0) { $debutliaison="AND"; } else { $debutliaison=""; }

$req_search .= "$debutliaison gamename  LIKE '%$notremotchercher%' $liaison ";
}

//Now you lauch your query here
$selection=mysqli_query($link, "$req_search") or die(mysqli_error($link)); 

?>

通过这样做,您可以将%添加到查询中的每个单词,这将为您提供更多可供您选择的结果。