如何设置AND条件到所有列 - PHP

时间:2015-04-19 10:43:25

标签: php mysql jquery-datatables

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

这是我想要的示例图片

extended AND

2 个答案:

答案 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;
}