Skip to content

helgispbru/doclister-filter-multitv

Repository files navigation

doclister-filter-multitv

Фильтр для DocLister по TV типа multiTV, формат записи фильтра:

multitv:tvname:operator:name|value

Описание фильтра:

название описание
multitv фильтр по multiTV
tvname название tv
operator как сравнивать
name поле name для поиска
value значение value для поиска

Поиск реализован с помощью функций MySQL, список ниже:

функция версия MySQL
JSON_SEARCH от 5.7
JSON_EXTRACT от 5.7
JSON_TABLE от 8.4

Для каждого оператора указано какая минимальная версия MySQL требуется.

Операторы

Оператор Описание версия mysql
=, eq, is равно, точное совпадение 5.7
!=, no, isnot нет совпадений 5.7
isnull нет никакого значения 5.7
isnotnull есть какое-тор значение 5.7
>, gt больше 8.4
<, lt меньше 8.4
<=, elt меньше или равно 8.4
>=, egt больше или равно 8.4
%, like содержит строку 5.7
like-r начинается строкой 5.7
like-l заканчивается строкой 5.7
сontainsOne содержит хотя бы одно значение как часть строки 5.7
сontainsAll содержит все значения как часть строки 5.7
in значение строки равно одному из значений 5.7
notin значение строки не равно ни одному из значений 5.7

Особенности по операторам

Хранение значений в multiTV сделано в виде массива объектов, а значения полей всегда хранится как строка, например для поля name = 10 хранится в json как "name": "10", а всё вместе выглядит так:

{
    "fieldValue": [
        { "name": "value1" },
        { "name": "value2" },
        { "name": "value3" }
    ],
    "fieldSettings": {
        "autoincrement": 1
    }
}

Из этого выходит ряд особенностей при поиске:

Операторы =, eq, is, !=, no, isnot

Формат: multitv:tvname:is:fieldname|fieldvalue

Ищет, что в массиве по полю fieldname есть хотя бы одно значение fieldvalue по указанным правилам сравнения.

Значения сравниваются как строки, то есть 10 и 10.0 это разные значения.

Например multitv:price:is:100 не найдёт ничего, если значение указано как 100.0 и наоборот.

Операторы isnull, isnotnull

Формат: multitv:tvname:isnull:fieldname|fieldvalue

Проверяется отсутствие любого значения у fieldname для isnull или наличие хоть какого-то значения у fieldname для isnotnull.

Операторы >, gt, <, lt, <=, elt, >=, egt

Формат: multitv:tvname:gt:fieldname|fieldvalue

Ищет, что в массиве по полю fieldname есть хотя бы одно значение fieldvalue и подходит под сравнение как число.

При поиске значения в базе и в фильтре приводятся к float.

Операторы %, like, like-r, like-l

Поиск по правилам LIKE в MySQL.

Формат: multitv:tvname:like:fieldname|fieldvalue

Ищет, что в массиве по полю fieldname есть строка fieldvalue, сопадающая по правилам LIKE.

Операторы сontainsOne, сontainsAll

Формат: multitv:tvname:containsOne:fieldname|val1,val2,val3

  • сontainsOne содержит хотя бы одно значение как часть строки
  • сontainsAll содержит все значения как часть строки

Ищет, что в массиве по полю fieldname содержится строка, совпадающая по правилам LIKE для выбранного оператора.

Операторы

Формат: multitv:tvname:in:field|val1,val2,val3

  • in значение строки равно одному из значений
  • notin значение строки не равно ни одному из значений

Ищет, что в массиве по полю fieldname содержится строка, совпадающая для выбранного оператора.

Пример

Например, есть tv типа multiTV под названием product_code, в которой содержится массив из нескольких code.

Тогда значение для multiTV будет иметь вид:

{
    "fieldValue": [
        { "code": "value1" },
        { "code": "value2" },
        { "code": "value3" }
    ],
    "fieldSettings": {
        "autoincrement": 1
    }
}

Найти все ресурсы, у которых в tv названной product_code в поле code есть value2:

multitv:product_code:is:code|value2

About

Фильтр для DocLister в multiTV

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages