如何为所有列设置 AND 条件 - php

Posted

技术标签:

【中文标题】如何为所有列设置 AND 条件 - php【英文标题】:How set AND condition to ALL columns - php 【发布时间】:2015-06-26 01:10:43 【问题描述】:

如果我输入,请在 MY TABLE 中

floor fly

表返回No matching records,因为全局搜索 php 函数在单个列中搜索记录。 但我希望 AND 条件适用于所有列。

如果我输入floor fly table,我应该显示如下内容:

|__Column1___|___Column2____|__Column4_|
|            |              |          |
|..FLOOR...  |DREAMS - FLY  |  1994    |
| ..dreams   |    xyz       | floor    |

注意:这不是 OR 函数abc OR cde 这是我的 php 代码,但并不像我预期的那样工作:

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

这是我想要的示例图片

【问题讨论】:

【参考方案1】:

评论有点长。

对于这种类型的搜索,您可以考虑使用全文索引。文档是here。这些实现了MATCH . . . AGAINST 功能。

使用此类功能,您可以按相关性对结果进行排序。这意味着您不必提前决定多个单词之间的连接符是“and”还是“or”。如果您愿意,您还可以实现布尔搜索,这将允许更复杂的复杂逻辑。

【讨论】:

在THIS 示例中,我设置了全文索引,但如果我输入floor fly,它就像一个纯OR 条件并返回太多记录,我只想像此表中那样过滤。 I wish this AND condtion 看看区别。但是在全文索引中设置 OR 条件我使用此代码但我不喜欢它 $globalSearch[] = "match(".$column['db'].") against (".$binding.")"; @user3520363 。 . .您是否知道fly 比默认的最小字长(4 个)短?所以它在搜索字符串中被完全忽略。另外,要获得相关性排序,需要使用order by 我不明白解决方案是不是全文索引,请问您可以查看HERE以消除任何疑问吗?目前,字长不是我首先关心的问题。我稍后会尝试解决这个问题【参考方案2】:

好吧,您应该决定要使用的搜索条件。 如果您希望通过某些短语使用匹配,并且不想使用全文搜索,您应该重建您的查询,如:

SELECT * FROM a WHERE a.col1 REGEXP 'text1|text2|text3' OR a.col2 REGEXP 'text1|text2|text3';

在你的 PHP 代码中,它应该是这样的(你没有指定输入数据格式,所以我假设你使用 "$str" 作为空格分隔的文本,并且想要检查 "$str" 中的所有单词搜索短语:

if ( $requestColumn['searchable'] == 'true' ) 
   $str = str_replace(" ","|",$str);
   $binding = self::bind( $bindings, $str, PDO::PARAM_STR );
   $globalSearch[] = "".$column['db']." REGEXP ".$binding;

【讨论】:

我用你的代码替换,但你的 php 代码像 OR 函数一样工作。例如,如果我键入 felino fly 表返回带有 felino 字的所有行和带有 fly 字的所有行。我想要连接函数,所以当我键入时,我只想显示带有两个单词的行。请问可以修吗?

以上是关于如何为所有列设置 AND 条件 - php的主要内容,如果未能解决你的问题,请参考以下文章

如何为 QFormLayout 的第一列设置最小宽度?

如何为单个列中存在的值添加多个条件并将结果显示在单独的列中?

如何为熊猫中的多个变量按列创建所有组合?

如何为php Web应用程序开发设置环境[关闭]

如何为文本字段设置条件。文本?

如何为fuelphp ORM关系设置动态条件