Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php代码没有按我希望的方式运行,用于搜索功能_Php_Search_Foreach - Fatal编程技术网

php代码没有按我希望的方式运行,用于搜索功能

php代码没有按我希望的方式运行,用于搜索功能,php,search,foreach,Php,Search,Foreach,搜索一个单词效果很好。我想有两个或更多的字工作以及 到目前为止,我已经做到了这一点,如果我搜索多个单词,结果如下: SELECT id, title, tag, type FROM table WHERE **AND** p.id LIKE '%flower%' OR title LIKE '%flower%' OR tag LIKE '%flower%' OR type LIKE '%flower%' AND p.id LIKE '%floral%' OR title LIKE '%flo

搜索一个单词效果很好。我想有两个或更多的字工作以及

到目前为止,我已经做到了这一点,如果我搜索多个单词,结果如下:

SELECT id, title, tag, type 
FROM table WHERE **AND** p.id LIKE '%flower%' OR title LIKE '%flower%' OR tag LIKE '%flower%' OR type LIKE '%flower%' 
AND p.id LIKE '%floral%' OR title LIKE '%floral%' OR tag LIKE '%floral%' OR type LIKE '%floral%' 
ORDER BY title
如何正确使用,以便在有多个单词搜索时,我不会在代码中获得额外的和

有没有更有效的方法

if (count($error) < 1) {
  $searchSQL = "SELECT id, title, tag, type     
                FROM table
                WHERE ";

 $searcheach = explode(" ", $searchTerms);

foreach($searcheach as $searchword) {

//if more than one word do this else do that
 if(strpos(trim($searchTerms), ' ') !== false) {
     $searchSQL .= "AND p.id LIKE '%{$searchword}%' 
                OR title LIKE '%{$searchword}%'
                OR tag LIKE '%{$searchword}%'
                OR type LIKE '%{$searchword}%' ";
     } 
     else {
         $searchSQL .= "p.id LIKE '%{$searchword}%' 
                OR title LIKE '%{$searchword}%'
                OR tag LIKE '%{$searchword}%'
                OR type LIKE '%{$searchword}%' ";
         }  

}
$searchSQL .= "ORDER BY title";
if(计数($error)<1){
$searchSQL=“选择id、标题、标记、类型
从桌子上
何处”;
$searcheach=explode(“,$searchTerms”);
foreach($searcheach作为$searchword){
//如果不止一个词,那么做这个,否则就做那个
if(strpos(trim($searchTerms),“”!==false){
$searchSQL.=”和p.id类似“{$searchword}%”
或类似“{$searchword}%”的标题
或类似“{$searchword}%”的标记
或类似“{$searchword}%”的类型;
} 
否则{
$searchSQL.=“p.id类似“%$searchword}%””
或类似“{$searchword}%”的标题
或类似“{$searchword}%”的标记
或类似“{$searchword}%”的类型;
}  
}
$searchSQL.=“按标题排序”;
我宁愿这样做

$searchSQL = "SELECT id, title, tag, type     
            FROM table
            WHERE (1=1)";
现在,您可以始终在每个条件之前添加

还有,看起来你漏掉了括号,我想应该是这样的

$searchSQL .= "AND (p.id LIKE '%{$searchword}%' 
            OR title LIKE '%{$searchword}%'
            OR tag LIKE '%{$searchword}%'
            OR type LIKE '%{$searchword}%') "
我宁愿这样做

$searchSQL = "SELECT id, title, tag, type     
            FROM table
            WHERE (1=1)";
现在,您可以始终在每个条件之前添加

还有,看起来你漏掉了括号,我想应该是这样的

$searchSQL .= "AND (p.id LIKE '%{$searchword}%' 
            OR title LIKE '%{$searchword}%'
            OR tag LIKE '%{$searchword}%'
            OR type LIKE '%{$searchword}%') "

我通常使用1=1过滤器,以便在搜索多个单词时,sql将:

SELECT id, title, tag, type 
  FROM table 
  WHERE 1=1 
    AND p.id LIKE '%flower%' 
    OR title LIKE '%flower%' 
    OR tag LIKE '%flower%' 
    OR type LIKE '%flower%' 
    AND p.id LIKE '%floral%' 
    OR title LIKE '%floral%' 
    OR tag LIKE '%floral%' 
    OR type LIKE '%floral%' 
  ORDER BY title
要做到这一点,代码是:

if (count($error) < 1) {
  $searchSQL = "SELECT id, title, tag, type     
                FROM table
                WHERE 1=1";

 $searcheach = explode(" ", $searchTerms);

foreach($searcheach as $searchword) {

//if more than one word do this else do that
 if(strpos(trim($searchTerms), ' ') !== false) {
     $searchSQL .= " AND p.id LIKE '%{$searchword}%' 
                OR title LIKE '%{$searchword}%'
                OR tag LIKE '%{$searchword}%'
                OR type LIKE '%{$searchword}%' ";
     } 
     else {
         $searchSQL .= "p.id LIKE '%{$searchword}%' 
                OR title LIKE '%{$searchword}%'
                OR tag LIKE '%{$searchword}%'
                OR type LIKE '%{$searchword}%' ";
         }  

}
$searchSQL .= "ORDER BY title";
if(计数($error)<1){
$searchSQL=“选择id、标题、标记、类型
从桌子上
其中1=1”;
$searcheach=explode(“,$searchTerms”);
foreach($searcheach作为$searchword){
//如果不止一个词,那么做这个,否则就做那个
if(strpos(trim($searchTerms),“”!==false){
$searchSQL.=”和p.id类似“{$searchword}%”
或类似“{$searchword}%”的标题
或类似“{$searchword}%”的标记
或类似“{$searchword}%”的类型;
} 
否则{
$searchSQL.=“p.id类似“%$searchword}%””
或类似“{$searchword}%”的标题
或类似“{$searchword}%”的标记
或类似“{$searchword}%”的类型;
}  
}
$searchSQL.=“按标题排序”;

我通常使用1=1过滤器,以便在搜索多个单词时,sql将:

SELECT id, title, tag, type 
  FROM table 
  WHERE 1=1 
    AND p.id LIKE '%flower%' 
    OR title LIKE '%flower%' 
    OR tag LIKE '%flower%' 
    OR type LIKE '%flower%' 
    AND p.id LIKE '%floral%' 
    OR title LIKE '%floral%' 
    OR tag LIKE '%floral%' 
    OR type LIKE '%floral%' 
  ORDER BY title
要做到这一点,代码是:

if (count($error) < 1) {
  $searchSQL = "SELECT id, title, tag, type     
                FROM table
                WHERE 1=1";

 $searcheach = explode(" ", $searchTerms);

foreach($searcheach as $searchword) {

//if more than one word do this else do that
 if(strpos(trim($searchTerms), ' ') !== false) {
     $searchSQL .= " AND p.id LIKE '%{$searchword}%' 
                OR title LIKE '%{$searchword}%'
                OR tag LIKE '%{$searchword}%'
                OR type LIKE '%{$searchword}%' ";
     } 
     else {
         $searchSQL .= "p.id LIKE '%{$searchword}%' 
                OR title LIKE '%{$searchword}%'
                OR tag LIKE '%{$searchword}%'
                OR type LIKE '%{$searchword}%' ";
         }  

}
$searchSQL .= "ORDER BY title";
if(计数($error)<1){
$searchSQL=“选择id、标题、标记、类型
从桌子上
其中1=1”;
$searcheach=explode(“,$searchTerms”);
foreach($searcheach作为$searchword){
//如果不止一个词,那么做这个,否则就做那个
if(strpos(trim($searchTerms),“”!==false){
$searchSQL.=”和p.id类似“{$searchword}%”
或类似“{$searchword}%”的标题
或类似“{$searchword}%”的标记
或类似“{$searchword}%”的类型;
} 
否则{
$searchSQL.=“p.id类似“%$searchword}%””
或类似“{$searchword}%”的标题
或类似“{$searchword}%”的标记
或类似“{$searchword}%”的类型;
}  
}
$searchSQL.=“按标题排序”;

我倾向于将所有术语构建为一个数组,然后使用内爆:

foreach($searcheach as $searchword) {
    $sqlSearchTerms[] = "p.id LIKE '%{$searchword}%' 
     OR title LIKE '%{$searchword}%'
     OR tag LIKE '%{$searchword}%'
     OR type LIKE '%{$searchword}%' ";
}

$searchSQL .= implode(' AND ', $sqlSearchTerms);

我倾向于将所有术语构建为一个数组,然后使用内爆:

foreach($searcheach as $searchword) {
    $sqlSearchTerms[] = "p.id LIKE '%{$searchword}%' 
     OR title LIKE '%{$searchword}%'
     OR tag LIKE '%{$searchword}%'
     OR type LIKE '%{$searchword}%' ";
}

$searchSQL .= implode(' AND ', $sqlSearchTerms);

很抱歉,你的问题很不清楚……你能详细说明你到底想做什么吗?if声明第一部分的
的目的是什么?你试过了吗?这会让你的生活轻松很多。很抱歉,你的问题很不清楚……你能详细说明你到底想做什么吗?你想做什么if语句第一部分的
的目的是什么?你试过了吗?它会让你的生活变得更轻松。除了使用布尔全文搜索,这是我个人会选择的选项…除了使用布尔全文搜索,这是我个人会选择的选项。。。