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语句第一部分的和
的目的是什么?你试过了吗?它会让你的生活变得更轻松。除了使用布尔全文搜索,这是我个人会选择的选项…除了使用布尔全文搜索,这是我个人会选择的选项。。。