Уникальные значения поля

19 Августа 2019 11:34 (Редактировано: 19 Августа 2019 19:47)

Здесь рассмотрен пример получения уникальных значений поля по дополнительным полям CMF modX. Вместо $field указывем название поля

SELECT tv_c.value
FROM modx_site_content AS c

INNER JOIN modx_site_tmplvar_contentvalues AS tv_c
ON c.id = tv_c.contentid

INNER JOIN modx_site_tmplvars AS tv
ON tv.id = tv_c.tmplvarid AND tv.name = '$field'

WHERE c.published = 1 AND c.deleted = 0
AND c.parent = '24'
GROUP BY tv_c.value

Далее можно оформить это в сниппет и передавать в параметре сниипета $field. Сниппет будет выводить option'ы с уникальными значениями.

$field = $modx->getOption('field', $scriptProperties, '');
$stmnt = $modx->prepare("
    SELECT tv_c.value
    FROM modx_site_content AS c

    INNER JOIN modx_site_tmplvar_contentvalues AS tv_c
    ON c.id = tv_c.contentid

    INNER JOIN modx_site_tmplvars AS tv
    ON tv.id = tv_c.tmplvarid AND tv.name = '$field'

    WHERE c.published = 1 AND c.deleted = 0
    AND c.parent = '24'
    GROUP BY tv_c.value"
);
$stmnt->execute();
$row = $stmnt->fetchAll(PDO::FETCH_ASSOC);
foreach($row as $item) {
    echo '<option value="' . $item['value'] . '">' . $item['value'] . '</option>';
}