WHERE 子句中的多个 OR 项


Multiple OR terms in WHERE clause

我正在建立一个供内部使用的穷人搜索引擎。当我在代码中使用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')-> ...构建。 文档完全绕过了这种构造。 谁能指出我正确的方向?

只需在查询对象上重复调用orWhere

$query = DB::table('books');
foreach ($columns as $column)
{
    $query->orWhere($column, 'like', "%{$term}%");
}
return $query;

你最好使用 MATCH AGAINST 进行搜索。