我们已经建立了一个搜索字段,您可以在其中搜索成分并查找食谱。 目前您只能输入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)));
谢谢! :)
答案 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链接,了解如何防止这种情况。