首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建多个单词搜索?SQL

问如何创建多个单词搜索?SQL
EN

Stack Overflow用户
提问于 2017-01-09 14:20:34
回答 3查看 75关注 0票数 1

我们制作了一个搜索字段,您可以在其中搜索配料和菜谱。就目前而言,您只能输入一种配料:

代码语言:javascript
复制
if (isset($_POST['search'])) {
$searchquery = $_POST['search'];


$query = mysql_query("SELECT * FROM opskrifter WHERE id IN 
(SELECT opskrifterid FROM ingredienser WHERE ing_name IN ('$searchquery'))") or die("search failed");

我们希望能够在同一个搜索字段中搜索多个成分,方法是用",“或类似的方法分隔这些成分。

有什么简单的方法吗?

编辑:我们试着用这样的方式爆炸而没有成功。

代码语言:javascript
复制
$searchTerms = explode(' ', $searchquery);
$searchTermBits = array();
foreach ($searchTerms as $term) {
if (!empty($term)) {
    $searchTermBits[] = "ing_name '$term'";
}}

...
$result = mysql_query("SELECT * FROM opskrifter WHERE id IN (SELECT * FROM  WHERE ".implode(' AND ', $searchTermBits)));

谢谢!:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-09 14:54:12

您可以简单地让用户键入他的值逗号分隔,输入将几乎以正确的语法进行查询。您只需在值周围添加分号,因为您在表中搜索字符串。

您可以使用PHP的str_replace()-Function:

代码语言:javascript
复制
$vals = $_POST['search'];
$valsFormatted = "'" . str_replace(",", "','", $vals) . "'";

在此代码中,您将输入的所有逗号按顺序替换为逗号加分号之前和后面的逗号,以便用分号包装输入的所有值。您还必须在字符串的开头和结尾添加一个。将上述函数中的第一个逗号替换为您希望用户将值分隔开的字符。

之后,您可以简单地将查询更改为:

代码语言:javascript
复制
$query = "SELECT * FROM opskrifter WHERE id IN 
(SELECT opskrifterid FROM ingredienser WHERE ing_name IN ('$valsFormatted'))";

还请告知,您的代码这样的SQL注入是脆弱的!查看这链接,了解如何防止这种情况发生。

票数 1
EN

Stack Overflow用户

发布于 2017-01-09 14:34:51

像这样的简单声明会奏效:

代码语言:javascript
复制
$array = implode("','",explode($_POST['search'], ","));
$query = mysql_query("SELECT * FROM opskrifter WHERE id IN (SELECT opskrifterid FROM ingredienser WHERE ing_name IN ({$array}))") or die("search failed");

首先爆炸你的搜索,然后内爆它(可能甚至不需要这样做)。之后,确保数组被用作'in‘操作符,作为字符串/数组。

有关此问题的更多信息,您可以阅读以下问题:PHP/MySQL在WHERE子句中使用数组

我本地机器上的工作副本是这样的;

代码语言:javascript
复制
$_POST['search'] = "0, 1, 2";

$array = implode ( "','", explode ( ",", $_POST['search'] ) );
$query = mysql_query("SELECT * FROM users WHERE id IN ('$array')") or die(mysql_error());
var_dump ( $array );
var_dump ( $query );
var_dump ( "SELECT * FROM users WHERE id IN ('$array')" );
var_dump ( mysql_fetch_array ( $query ) );

实际上,它确实返回了用户,因此,如果我们以这个示例为例并将其更改为您的代码,它将是(至少是查询):

代码语言:javascript
复制
$query = mysql_query("SELECT * FROM opskrifter WHERE id IN (SELECT opskrifterid FROM ingredienser WHERE ing_name IN ('$array'))") or die(mysql_error());

请注意更改后的$array变量。

票数 1
EN

Stack Overflow用户

发布于 2017-01-09 14:38:52

首先,您需要将来自搜索字段的文本转换为数组:

代码语言:javascript
复制
 $string = $_POST['search'];
 $array = explode( '"' , $string); 

因此,如果您输入搜索:test"hello"hi

数组将是:

代码语言:javascript
复制
1 => test,
2 => hello,
3 => hi

之后,您需要使用SQL格式:

代码语言:javascript
复制
WHERE column_name IN (value1,value2,...)

因此,您需要将我们创建的数组更改为具有以下格式的字符串:

代码语言:javascript
复制
$string = implode(',',$array);

因此,$string的回声将是:

代码语言:javascript
复制
test,hello,hi

SQL将是:

代码语言:javascript
复制
WHERE column_name IN ($string)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41550032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档