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

时间:2017-01-09 14:20:34

标签: php html mysql sql search

我们已经建立了一个搜索字段,您可以在其中搜索成分并查找食谱。 目前您只能输入1种成分:

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

我们希望能够在同一个搜索领域中搜索多种成分,方法是使用""或类似的东西。

有没有一种简单的方法可以实现这一目标?

编辑: 我们试图像这样使用爆炸而没有成功。

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

谢谢! :)

3 个答案:

答案 0 :(得分:1)

像这样的简单陈述可行:

delaycompress

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

有关此问题的详细信息,您可以阅读以下问题:PHP/MySQL using an array in WHERE clause

我本地机器的工作副本就是这个;

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

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

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

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

答案 1 :(得分:1)

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

 $string = $_POST['search'];
 $array = explode( '"' , $string); 

因此,如果您进行搜索:test"hello"hi

数组将是:

1 => test,
2 => hello,
3 => hi

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

WHERE column_name IN (value1,value2,...)

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

$string = implode(',',$array);

所以$ string的回声是:

test,hello,hi

和SQL将是:

WHERE column_name IN ($string)

答案 2 :(得分:1)

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

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

$vals = $_POST['search'];
$valsFormatted = "'" . str_replace(",", "','", $vals) . "'";

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

分隔开的char

之后,您只需将查询更改为以下内容:

$query = "SELECT * FROM opskrifter WHERE id IN 
(SELECT opskrifterid FROM ingredienser WHERE ing_name IN ('$valsFormatted'))";

另请注意,您的代码易受SQL Injections攻击!查看this链接,了解如何防止这种情况。