我正在建立一个穷人的内部搜索引擎。回到我在代码中使用MySQLi或pgsql db这样做的时候,我会写下这样的内容:
$sql = "SELECT * FROM $table ";
$WC = array();
foreach($columns as $col )
{
$WC[] = $col ." like '%".$term."%'";
}
$sql .= ' WHERE ('. implode(') OR (', $WC). ')';
return $sql;
它会将一些(未知的)列名与搜索词连接起来。生成的SQL看起来有点像这样:
SELECT * FROM books WHERE (title like '%kids%') OR (publisher like '%kids%') OR (author like '%kids%');
相当粗糙但有效到一定程度。拥有一个小而众所周知的数据集可以使这种事情非常有用。
...然而
我不能为我的生活弄清楚如何将任意数量的OR子句附加到DB :: table(' books') - > ...构造。文档完全围绕这种结构。谁能指出我正确的方向?
答案 0 :(得分:1)
只需在查询对象上反复调用orWhere
:
$query = DB::table('books');
foreach ($columns as $column)
{
$query->orWhere($column, 'like', "%{$term}%");
}
return $query;
答案 1 :(得分:0)
您最好使用MATCH AGAINST进行搜索。