我们制作了一个搜索字段,您可以在其中搜索配料和菜谱。就目前而言,您只能输入一种配料:
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)));谢谢!:)
发布于 2017-01-09 14:54:12
您可以简单地让用户键入他的值逗号分隔,输入将几乎以正确的语法进行查询。您只需在值周围添加分号,因为您在表中搜索字符串。
您可以使用PHP的str_replace()-Function:
$vals = $_POST['search'];
$valsFormatted = "'" . str_replace(",", "','", $vals) . "'";在此代码中,您将输入的所有逗号按顺序替换为逗号加分号之前和后面的逗号,以便用分号包装输入的所有值。您还必须在字符串的开头和结尾添加一个。将上述函数中的第一个逗号替换为您希望用户将值分隔开的字符。
之后,您可以简单地将查询更改为:
$query = "SELECT * FROM opskrifter WHERE id IN
(SELECT opskrifterid FROM ingredienser WHERE ing_name IN ('$valsFormatted'))";发布于 2017-01-09 14:34:51
像这样的简单声明会奏效:
$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子句中使用数组
我本地机器上的工作副本是这样的;
$_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 ) );实际上,它确实返回了用户,因此,如果我们以这个示例为例并将其更改为您的代码,它将是(至少是查询):
$query = mysql_query("SELECT * FROM opskrifter WHERE id IN (SELECT opskrifterid FROM ingredienser WHERE ing_name IN ('$array'))") or die(mysql_error());请注意更改后的$array变量。
发布于 2017-01-09 14:38:52
首先,您需要将来自搜索字段的文本转换为数组:
$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,hiSQL将是:
WHERE column_name IN ($string)https://stackoverflow.com/questions/41550032
复制相似问题