3

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

    SELECT gamename
    FROM giveaway
    WHERE gamename LIKE '$query'

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

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

  • $query = "一目了然"
  • $query = "tex 墨菲火星备忘录"
  • $查询=“飞”
  • $query = "企鹅竞技场 sednas 世界"

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

例子:

  • “众目睽睽下”
  • “特克斯墨菲:火星备忘录”
  • “飞N”
  • “企鹅竞技场:塞德娜的世界!”

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

  • $query = "普通%sight"
  • $query = "tex%murphy%martian%备忘录"
  • $查询=“飞”
  • $query = "企鹅%竞技场%sednas%world"

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

.

关于我的问题:

我的问题是,如何更好地改进这一点,以便第三和第四个也起作用?

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

  • $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%l %d%"

但我不确定这将如何提高性能,以及这是否是最好的解决方案。

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

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

进步:

经过一番测试,我发现添加大量通配符 (%) 并不是一个好主意。你会从数据库中得到意想不到的结果,仅仅因为你刚刚添加了很多可以匹配的方法。

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

4

1 回答 1

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

?>

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

于 2015-02-14T13:21:51.837 回答