У меня проблемы с выяснением этого.
У меня есть следующие 3 таблицы: -
Таблица транзакций
Таблица продуктов
Products_Transaction Table
Transaction_ID
Product_ID
Количество
Таким образом, отношения следующие - транзакциявыполняется, и затем таблица products_transactions объединяет их, поскольку транзакция может иметь несколько продуктов, а продукт может иметь несколько транзакций.Join_table также отслеживает проданную сумму, поэтому, например, газета продается в транзакции № 1 и с количеством 2 (таким образом продано 2 газеты).
Теперь я хочу сделать заявление MySQLкоторый находит все проданные продукты, в определенный интервал дат, поэтому я получаю что-то вроде этого: -
- 3 х газет
- 12 х газированных напитков
- 15 х пива
Итак, он просто подсчитывает и суммирует все проданные продукты.
Я серьезно все перепробовал - я работаю с CakePHP, поэтому предложенное решение будет полезным, нодаже простой SQL для достижения этой цели может помочь мне.
Пока что это то, что у меня есть: -
$productTransactionsTable = TableRegistry::get('products_transactions');
$productsTransactions = $productTransactionsTable->find('all');
$productsTransactions->matching('transactions', function ($q) {
return $q->where([
'transaction_date >=' => new \DateTime('-1 week'),
'transaction_date <=' => new \DateTime('now'),
'device_id IN' => $this->deviceIdsInDepartment(2)
]);
});
$productsTransactions->contain(['products']);
$productsTransactions->select([
'count' => $productsTransactions->func()->count('quantity'),
'name' => 'products.name'
]);
$productsTransactions->groupBy('products.id');
Но это просто выдает 1 единственный результат, который считает все вместев 1 строку, например:
/src/Controller/EconomyController.php (line 665)
[(int) 0 => object (Cake \ ORM \ Entity) {
'count' => (int) 4504,
'name' => 'D Morgenbrød',
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'products_transactions'
}
]
Любая помощьценится!Я серьезно застрял здесь!
Спасибо!