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


MySQL query that can handle missing characters

我正在努力改进我的MySQL查询。

    SELECT gamename
    FROM giveaway
    WHERE gamename LIKE '$query'

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

  • http://www.steamgifts.com/giveaway/l7Jlj/plain-sight
  • http://www.steamgifts.com/giveaway/okjzc/tex-murphy-martian-memorandum
  • http://www.steamgifts.com/giveaway/RqIqD/flyn
  • http://www.steamgifts.com/giveaway/FzJBC/penguins-arena-sednas-world

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

  • $query="显而易见"
  • $query="tex murphy martian备忘录"
  • $query="flyn"
  • $query="企鹅竞技场sednas世界"

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

示例:

  • "平视"
  • "Tex Murphy:火星备忘录"
  • "Fly'N"
  • "企鹅竞技场:塞德娜的世界!"

因此,当输入从URL获取的名称时,这不会产生第二、第三和第四个示例的结果。所以我使用了一个%字符。

  • $query="纯视觉%"
  • $query="tex%murphy%martian%备忘录"
  • $query="flyn"
  • $query="企鹅%arena%sednas%world"

现在给出第一个和第二个例子的结果。

关于我的问题:

我的问题是,如何更好地改进这一点,使第三个和第四个也能工作?

我正在考虑在每个字符前后添加额外的%:

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

但我不确定这将如何在性能方面进行,以及这是否是最好的解决方案

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

关于如何进行良好的工作查询,还有其他提示吗?

进展:

经过一点测试,我发现添加大量通配符(%)不是一个好主意。您将从数据库中返回意外的结果,这仅仅是因为您添加了许多匹配方式。

使用段塞法似乎是唯一的选择。

如果我很理解你的问题,你正在创建一种搜索这些信息的方法。如果是这样的话,那就试试

$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)); 
?>

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