Запрос к БД. LEFTJOIN x LEFTJOIN

Делаю запрос к БД, вытягиваю все опубликаваные товари с сайта. LEFT JOIN для всех фоток, а также LEFT JOIN для модификаций, чтобы вычиcлить остаток товара
<?php
$query = $modx->newQuery('msProduct');
$query->leftJoin('msProductData','Data', 'msProduct.id = Data.id');
$query->leftJoin('msopModification', 'msop', 'msop.rid = msProduct.id');
$query->leftJoin('msVendor', 'Vendor', 'Data.vendor=Vendor.id');
$query->leftJoin('msProductFile', 'Files', 'msProduct.id = Files.product_id AND Files.parent = 0');

$query->select(array(
    $modx->getSelectColumns('msProduct','msProduct','', array("id", "uri", "pagetitle")),
    $modx->getSelectColumns('msVendor', 'Vendor', 'vendor.', array('name')),
    $modx->getSelectColumns('msProductData','Data','', array("article", "price", "old_price", "sex", "color")),
    "JSON_ARRAYAGG(
        JSON_OBJECT('rank', `Files`.`rank`,'url', `Files`.`url`)
    ) AS images",
    'SUM(`msop`.`count`) AS `count`',
));

$query->groupBy('msProduct.id');
$query->where(array(
    '`msProduct`.`class_key`' => 'msProduct',
    '`msProduct`.`published`' => '1'
));
$query->sortby("id", "ASC");
$query->prepare();
$query->stmt->execute();
$rows = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
Но в результате в поле count выводиться остаток умноженый на количество фоток, а фотки дублируються за каждую модификацию.

Подскажите как правильно запрос построить. Или нужно оставить только один LEFT JOIN (count или images) а при переборе результатов делать новый запрос к БД?
Тодор
08 мая 2023, 21:51
modx.pro
889
0

Комментарии: 1

Артур Шевченко
09 мая 2023, 17:35
0
Товар и модификации связаны связью один ко многим. Поэтому если тебе нужна информацию из модификации выбирай её и присоединяй таблицы msProductData, msVendor. а картинки надо будет забирать другим запросом.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1