Запрос к БД. LEFTJOIN x LEFTJOIN
Делаю запрос к БД, вытягиваю все опубликаваные товари с сайта. LEFT JOIN для всех фоток, а также LEFT JOIN для модификаций, чтобы вычиcлить остаток товара
Подскажите как правильно запрос построить. Или нужно оставить только один LEFT JOIN (count или images) а при переборе результатов делать новый запрос к БД?
<?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) а при переборе результатов делать новый запрос к БД?
Комментарии: 1
Товар и модификации связаны связью один ко многим. Поэтому если тебе нужна информацию из модификации выбирай её и присоединяй таблицы msProductData, msVendor. а картинки надо будет забирать другим запросом.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.