В МОЕЙ ТАБЛИЦЕ, если я напечатаю
floor fly
table return No matching records
потому что поиск в Global Search php выполняет поиск записей внутри столбца SINGLE.
Но я хочу, чтобы условие AND работало со всеми столбцами.
Если я набираю floor fly
должен показать что-то вроде:
|__Column1___|___Column2____|__Column4_| | | | | |..FLOOR... |DREAMS - FLY | 1994 | | ..dreams | xyz | floor |
Внимание: это не функция 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
Это пример того, что я хочу
Это немного для комментария.
Для этого типа поиска вы можете рассмотреть полный текстовый индекс. Документация находится здесь . Они реализуют MATCH . . . AGAINST
MATCH . . . AGAINST
MATCH . . . AGAINST
функциональности.
С такой функциональностью вы можете заказать результаты по релевантности. Это означает, что вам не нужно заранее решать, является ли соединитель «и» или «или» между несколькими словами. Вы также можете реализовать логический поиск, который позволит более сложную сложную логику, если вы этого желаете.
ну, вы должны решить, какие критерии поиска вы хотите использовать. Если вы хотите, чтобы вы использовали совпадение по определенной фразе и не хотите использовать FULL TEXT search, вы должны перестроить свой запрос так:
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; }