Поясню селект на словах, думаю станет понятно.
Мы выгребаем дискаут_кард и подсчитываем их вхождение из всех записей по склейке баз транзакций <+ бонус_транзакций (LEFT JOIN).
Это значит, что в финальной выборке могут быть записи без указания параметров из базы бонус_транзакций, при этом поля будут забиты null-ом.
Т.е. мы отдали приоритет целостности, где её гарантом выступает список всех проводок а не бонусов.
Если на первое место ставится именно регистрация бонуса, то нужно либо поменть порядок баз (FROM `loy_bonus_transactions` as lbt LEFT JOIN `loy_transaction` as lt ON lbt.`transaction_id` = lt.`id`) и тогда критерием целостности будет проводка бонуса, либо сделать INNER JOIN и тогда получить выборку где в обязательном порядке есть все поля.
Поясню селект на словах, думаю станет понятно.
Мы выгребаем дискаут_кард и подсчитываем их вхождение из всех записей по склейке баз транзакций <+ бонус_транзакций (LEFT JOIN).
Это значит, что в финальной выборке могут быть записи без указания параметров из базы бонус_транзакций, при этом поля будут забиты null-ом.
Т.е. мы отдали приоритет целостности, где её гарантом выступает список всех проводок а не бонусов.
Если на первое место ставится именно регистрация бонуса, то нужно либо поменть порядок баз (FROM `loy_bonus_transactions` as lbt LEFT JOIN `loy_transaction` as lt ON lbt.`transaction_id` = lt.`id`) и тогда критерием целостности будет проводка бонуса, либо сделать INNER JOIN и тогда получить выборку где в обязательном порядке есть все поля.
INNER JOIN — делается медленнее.
Ну и в довесок ссылка на читшит dsin.files.wordpress.com/2013/03/sqljoins_cheatshe...