Снова where и множественный выбор
Здравствуйте!
Логика должна быть следующая: у текущего ресурса, где запускается выборка есть TV option (например имя1==1) с одним значением. У выбираемых ресурсов есть TV rubrika со списком множественного выбора (там несколько значений вида имя1==1||имя2==2||имя3==3). Выбираться должны только ресурсы имеющие в своем множественном списке совпадение с текущим значением TV ресурса где запускается выборка.
Вот так не работает:
Логика должна быть следующая: у текущего ресурса, где запускается выборка есть TV option (например имя1==1) с одним значением. У выбираемых ресурсов есть TV rubrika со списком множественного выбора (там несколько значений вида имя1==1||имя2==2||имя3==3). Выбираться должны только ресурсы имеющие в своем множественном списке совпадение с текущим значением TV ресурса где запускается выборка.
Вот так не работает:
[[!pdoPage?
&parents=`4`
&includeTVs=`rubrika`
&where=`{"[[*option]]:IN":rubrika}`
&tpl=`RowTpl`
]]
Подскажите, пожалуйста, как решить данную задачку. Комментарии: 8
Вот тут вообще не понятно, что вы делаете:
Добавьте &showLog=`1` и посмотрите, свой запрос.
{"[[*option]]:IN":rubrika}
Через IN тут не решить вопрос. Нужно через LIKE ()Добавьте &showLog=`1` и посмотрите, свой запрос.
Нужно чтобы хотя бы одно из множества значений TV выбираемых ресурсов совпало со значением TV текущего ресурса
А TV текущего ресурса как называется?
TV текущего ресурса — option
TV выбираемых ресурсов с множественными значениями — rubrika
TV выбираемых ресурсов с множественными значениями — rubrika
Может так
[[!pdoPage?
&parents=`4`
&includeTVs=`rubrika`
&where=`{"rubrika:LIKE":"%[[*option]]%"}`
&tpl=`RowTpl`
]]
если значения rubrika меньше 10 должно ловить. Если больше 10, то на option=1 словит и 1 и 10 и 11 и т.д.
Спасибо большое!
Да такой подход действительно работает! Мне подошел этот вариант (как раз сейчас 9 элементов).
Но есть ли более универсальный вариант, где более 10 вариантов?
Да такой подход действительно работает! Мне подошел этот вариант (как раз сейчас 9 элементов).
Но есть ли более универсальный вариант, где более 10 вариантов?
Ну тогда надо архитектуру как-то менять.
TV rubrika со списком множественного выбора (там несколько значений вида имя1==1||имя2==2||имя3==3) храниться в базе как текст например такой «1||3||13». И ни как запросом LIKE не отличишь 1 от 13.
Нужно список множественного выбора хранить как отдельные значения в таблице. Например tvsuperselect храниться в 2 таблицах и как текст «1||3||13» и в отдельной таблице отдельные значения. Я не помню как именно.
Если использовать tvsuperselect, то, наверно, можно в pdoPage подцепить 2-ю таблицу и написать что-то вроде
TV rubrika со списком множественного выбора (там несколько значений вида имя1==1||имя2==2||имя3==3) храниться в базе как текст например такой «1||3||13». И ни как запросом LIKE не отличишь 1 от 13.
Нужно список множественного выбора хранить как отдельные значения в таблице. Например tvsuperselect храниться в 2 таблицах и как текст «1||3||13» и в отдельной таблице отдельные значения. Я не помню как именно.
Если использовать tvsuperselect, то, наверно, можно в pdoPage подцепить 2-ю таблицу и написать что-то вроде
[[!pdoPage?
&parents=`4`
&loadModels=`tvsuperselect`
&leftJoin=`{"2-таблица":....}`
&groupby=`modResource.id`
&where=`{"2-таблица.value":[[*option]]}`
&tpl=`RowTpl`
]]
Посмотрите это решение:
modx.pro/solutions/23005
modx.pro/solutions/23005
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.