请记住,我的SQL经验很少,所以我可能做错了。
我正在尝试设置搜索表,但只是搜索用户输入的字符串并不理想,因为虽然某些内容可能会出现“steve”,但如果用户输入“steve jobs story”,则无法匹配如果那不存在,因为它将寻找整个字符串而不是分别查找每个单词。
我尝试通过将字符串爆炸成数组然后将其与%s分开来进行分解,因此像“steve jobs story”这样的搜索将是“steve%jobs%story”,并且查询它将是“%steve%jobs%story%”。当我尝试搜索这个时,我没有得到任何错误,但查询没有找到任何错误,而当我只输入一个单词时,它就有效,所以我猜测我不想做的事情。
有人能指出我正确的方向吗?这是我的控制器/型号:
// Controller
$query = $request->get('q');
$explodedQuery = explode(" ", $query);
$newQuery = implode("%", $explodedQuery);
$articles = Article::isLikeTitle($newQuery)
->isLikeBody($newQuery)
->latest('published_at')
->published()
->paginate(10);
// Model
public function scopeIsLikeTitle($query, $q)
{
return $query->where('title', 'LIKE', "%$q%");
}
public function scopeIsLikeBody($query, $q)
{
return $query->where('body', 'LIKE', "%$q%");
}
答案 0 :(得分:4)
您可以使用循环将查询附加到orWhere,如此
library(sqldf)
sqldf("select df_a.id
, case
when df_b.q1 = 1 then df_a.q1
else 0
end as value
from df_a
inner join df_b on df_a.id = df_b.id")