pdoTools: условие WHERE с REGEXP
Как написать в pdoTools условие с REGEXP?
Вот пытаюсь засунуть в where конструкцию такого вида:
В логе вывода появляется строка: Added where condition: 0=(TVparam1.value REGEXP aaa),
но в результирующем запросе этого условия нет :(
Если это: {var $whereArr[]="(TVparam1.value REGEXP 'aaa')"} удалить или поменять на любую другую конструкцию, где нет REGEXP все прекрасно работает.
@Василий Наумкин, pdoTools вообще поддерживает создание условий с REGEXP?
UPD: судя по всему вся проблема в xPDO, который кастрированный и не поддерживает REGEXP:(, github.com/modxcms/xpdo/pull/119
В связи с этим вопрос… как реализовать переписать такое условие с чистого mysql:
WHERE `tmplvarid`=6 and `value` REGEXP '^62$|^62\\|\\||\\|\\|62$|\\|\\|62\\|\\|'
по человечески: выбрать поля ТВ (id=6), у которых значения:
либо начинаются на 62
либо заканчиваются на 62
равно 62
содержит 62
но при этом не выбирать скажем 162 или 624
т.е. эти строки должны попасть в выборку:
62
10||62
62||10
10||62||89
10||62||89||162
а этих в выборке не должно быть:
162
162||10
10||162
10||162||189
10
UPD2
РЕШЕНИЕ: в стиле «сам спросил, сам ответил»:
В общем чтоб кастрированный xpdo выбрал то что надо, приводим запрос к такому виду:
WHERE `tmplvarid`=6 and `value` = '62' OR `value` LIKE '%||62||%' OR `value` LIKE '%||62' OR `value` LIKE '62||%'
Вот пытаюсь засунуть в where конструкцию такого вида:
{var $whereArr[]="(TVparam1.value REGEXP 'aaa')"}
...
{var $whereArr[]="(TVparam2.value = 'bbb')"}
...
{if $whereArr}
{var $wh = '["' ~ $whereArr | join : ' AND ' ~ '"]'}
{/if}
{$_modx->runSnippet('pdoResources', [
....
'where' => $wh,
....
])}
но в результирующем запросе этого условия нет :(
Если это: {var $whereArr[]="(TVparam1.value REGEXP 'aaa')"} удалить или поменять на любую другую конструкцию, где нет REGEXP все прекрасно работает.
@Василий Наумкин, pdoTools вообще поддерживает создание условий с REGEXP?
UPD: судя по всему вся проблема в xPDO, который кастрированный и не поддерживает REGEXP:(, github.com/modxcms/xpdo/pull/119
В связи с этим вопрос… как реализовать переписать такое условие с чистого mysql:
WHERE `tmplvarid`=6 and `value` REGEXP '^62$|^62\\|\\||\\|\\|62$|\\|\\|62\\|\\|'
по человечески: выбрать поля ТВ (id=6), у которых значения:
либо начинаются на 62
либо заканчиваются на 62
равно 62
содержит 62
но при этом не выбирать скажем 162 или 624
т.е. эти строки должны попасть в выборку:
62
10||62
62||10
10||62||89
10||62||89||162
а этих в выборке не должно быть:
162
162||10
10||162
10||162||189
10
UPD2
РЕШЕНИЕ: в стиле «сам спросил, сам ответил»:
В общем чтоб кастрированный xpdo выбрал то что надо, приводим запрос к такому виду:
WHERE `tmplvarid`=6 and `value` = '62' OR `value` LIKE '%||62||%' OR `value` LIKE '%||62' OR `value` LIKE '62||%'
Комментарии: 2
РЕШЕНИЕ: в стиле «сам спросил, сам ответил»:Решение не очень годное. Для вашего случая больше вот это подойдет: modx.pro/development/7236
И если правильно прочитаете написанное, сможете и REGEXP вызвать, но бегать регуляркой по такой строке — не самое правильное решение.
Николай, согласен, что решение не оптимально, но рабочее :)
Разница во времени выполнения sql-запроса есть, но она не критична (в данном конкретном случае, для конкретного сайта).
На вашу заметку когда- то давно натыкался, но так и не смог найти. Теперь занес в закладки.
Рад, что не забываете о MODx :)
Разница во времени выполнения sql-запроса есть, но она не критична (в данном конкретном случае, для конкретного сайта).
На вашу заметку когда- то давно натыкался, но так и не смог найти. Теперь занес в закладки.
Рад, что не забываете о MODx :)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.