在不知道用户输入内容的情况下进行查询(SQL、PHP)

在不知道用户输入内容的情况下进行查询(SQL、PHP),php,mysql,sql-like,Php,Mysql,Sql Like,我正在做一个项目,需要一些帮助 以下是我想做的: 我正在网页上使用MySQL和PHP。有一个输入字段,用户将在其中输入位置国家、城市、州、日期、比赛长度或比赛名称。问题是,他们可以输入这些项目的任意组合,就像你在谷歌中一样 之后,我必须查询数据库以显示结果。这是我现在使用的查询: LIKE '$str%' OR city LIKE '$str%' OR state LIKE '$str%' OR country LIKE '$str%' OR race_distancia LIKE '$

我正在做一个项目,需要一些帮助

以下是我想做的:

我正在网页上使用MySQL和PHP。有一个输入字段,用户将在其中输入位置国家、城市、州、日期、比赛长度或比赛名称。问题是,他们可以输入这些项目的任意组合,就像你在谷歌中一样

之后,我必须查询数据库以显示结果。这是我现在使用的查询:

LIKE '$str%' 
OR city LIKE '$str%' 
OR state LIKE '$str%' 
OR country LIKE '$str%' 
OR race_distancia LIKE '$str%'
$str是一个包含输入文本的php变量

我使用“$str%”,因为它将使用我创建的索引,尽管由于正则表达式被添加到末尾,因此无法正常工作。因此,如果我输入例如:“迈阿密5k”,它将不起作用。因为没有比赛叫迈阿密5k,也没有地点。。。但是迈阿密有5公里,呵呵

我在考虑将输入的文本分解到空格中,然后对每个分解的项运行一个查询,然后删除重复的结果。这会起作用,但我正在努力找到最有效的解决方案,我不确定如何避免重复项目


提前感谢

可能会帮助您

您可以使用以下方法将输入分解为单词:

$searchWords = explode(" ", $input);
如果有人在洛杉矶打字,它会搜索“Los”和“Angeles”,但我认为它会工作得很好。如果有太多的结果,您可以使用更多的输入字段进行更高级的搜索

编辑:我看到你走到了这一步。要筛选双字,请签出:


编辑2:关于洛杉矶问题:也许可以接受使用洛杉矶作为搜索词。要进入数组,请参阅这篇非常好的帖子:

首先,使用类似PDO PHP数据库对象的东西来准备查询,以防止SQL注入。这些搜索词似乎定义得比较明确,我会用一个框表示国家,然后用一个框表示城市。。。。有可能为其中一些人列出一份清单,为其他人提供免费文本。如果有两个单词的城市,在空间上搜索将不起作用。此外,如果有人搜索的城市也是一个州的名称,即纽约,纽约,你的查询将无法正常工作。