Как получить значение всех TV-полей ресурса одним SQL-запросом?
Задача решается в лоб, если значения TV-полей хранятся именно в виде нужных значений.
Если TV представляет собой список значений значение1==1||значение2==2||значение3==3, то в TV будет хранится цифры 1,2,3 а нам нужны значения значение1, значение2, значение3. Тогда задачу можно решить так
select t2.name, t2.caption, t2.description, t1.value
from modx_site_tmplvar_contentvalues as t1
left join modx_site_tmplvars as t2 on t1.tmplvarid = t2.id
where t1.contentid = :resourceIdЕсли TV представляет собой список значений значение1==1||значение2==2||значение3==3, то в TV будет хранится цифры 1,2,3 а нам нужны значения значение1, значение2, значение3. Тогда задачу можно решить так
select
t2.name, t2.caption, t2.description, if(t2.elements like concat('%==', t1.value, '%'), REGEXP_SUBSTR(t2.elements, concat('[:lower:]+(?=\={2}', t1.value, ')')), t1.value) as value
from modx_site_tmplvar_contentvalues as t1
left join modx_site_tmplvars as t2 on t1.tmplvarid = t2.id
where
t1.contentid = :resourceIdНо работать это будет только в MySql8, т.к. начиная с 8 версии появилась функция REGEXP_SUBSTR. Комментарии: 2
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
1 вариант тормозной, берем 100 тысяч ресурсов, по 50 TV у каждого.