MY TABLE如果我输入
floor fly
表返回No matching records
因为全局搜索 php函数在SINGLE列中搜索记录。
但我希望AND条件适用于所有列。
如果我输入floor fly
表,我应该显示如下内容:
|__Column1___|___Column2____|__Column4_|
| | | |
|..FLOOR... |DREAMS - FLY | 1994 |
| ..dreams | xyz | floor |
注意:这不是OR函数abc OR cde
这是我的PHP代码但是AND不像我期望的那样工作:
static function filter ( $request, $columns, &$bindings )
{
$globalSearch = array();
$columnSearch = array();
$dtColumns = self::pluck( $columns, 'dt' );
if ( isset($request['search']) && $request['search']['value'] != '' ) {
$str = $request['search']['value'];
for ( $i=0, $ien=count($request['columns']) ; $i<$ien ; $i++ ) {
$requestColumn = $request['columns'][$i];
$columnIdx = array_search( $requestColumn['data'], $dtColumns );
$column = $columns[ $columnIdx ];
if ( $requestColumn['searchable'] == 'true' ) {
$binding = self::bind( $bindings, '%'.$str.'%', PDO::PARAM_STR );
$globalSearch[] = "".$column['db']." LIKE ".$binding;
}
}
}
消除对我想要的任何疑虑:LOOK
这是我想要的示例图片
答案 0 :(得分:0)
评论时间有点长。
对于此类搜索,您可以考虑使用全文索引。文档是here。这些实现了MATCH . . . AGAINST
功能。
使用此功能,您可以按相关性排序结果。这意味着您无需事先决定连接器是否在多个单词之间是“和”或“或”。您还可以实现布尔搜索,如果您愿意,可以使用更复杂的复杂逻辑。
答案 1 :(得分:0)
好吧,您应该决定要使用的搜索条件。 如果您希望使用某个短语匹配,并且不想使用FULL TEXT搜索,则应重建您的查询,如:
SELECT * FROM a WHERE a.col1 REGEXP 'text1|text2|text3' OR a.col2 REGEXP 'text1|text2|text3';
在你的PHP代码中,它应该像这样(你没有指定输入数据格式,所以我假设,你正在使用&#34; $ str&#34;作为空格分隔文本,并想要检查所有单词in&#34; $ str&#34;搜索词组:
if ( $requestColumn['searchable'] == 'true' ) {
$str = str_replace(" ","|",$str);
$binding = self::bind( $bindings, $str, PDO::PARAM_STR );
$globalSearch[] = "".$column['db']." REGEXP ".$binding;
}