【发布时间】:2019-06-17 13:34:24
【问题描述】:
我目前正在尝试使用 Laravel / Eloquent 执行查询,但我决定先编写 SQL 查询以找出问题所在。
我想按日期分组并使用多个连接组合两个表的结果,但是当我像这样添加 product_metrics 表时结果出错:
inner join `product_metrics` on `products`.`id` = `product_metrics`.`product_id`
select
date_format(`date` + INTERVAL 1 HOUR, '%Y-%m-%d') as day,
round(sum(`item_price` * `quantity_ordered`), 2) as sales,
sum(`quantity_ordered`) as units,
sum(
CASE
WHEN `is_refund` THEN `item_price` * `quantity_ordered`
ELSE 0
END
) as refunds,
sum(
CASE
WHEN `is_refund` THEN `quantity_ordered`
ELSE 0
END
) as refund_units,
sum(`promotion_discount`) as discounts,
sum(`sessions`) as sessions,
count(DISTINCT(customer_order_id)) as orders,
round(sum(`product_sales`), 2) as sales_sc,
round(
sum(`unit_session_percentage` * `product_sales`) / sum(`product_sales`),
2
) as cvr,
sum(`page_views`) as views
from
`products`
inner join `product_brands` on `products`.`brand_id` = `product_brands`.`id`
inner join `customer_order_items` on `products`.`id` = `customer_order_items`.`product_id`
inner join `customer_orders` on `customer_order_items`.`customer_order_id` = `customer_orders`.`id`
inner join `product_metrics` on `products`.`id` = `product_metrics`.`product_id`
inner join `customers` on `products`.`customer_id` = `customers`.`id`
inner join `marketplaces` on `products`.`marketplace_id` = `marketplaces`.`id`
where
(
`date` between "2019-05-01 00:00:00"
and "2019-05-31 00:00:00"
or `purchase_date` between "2019-05-01 00:00:00"
and "2019-05-31 00:00:00"
and `customers`.`id` = 18
)
and `products`.`deleted_at` is null
group by
date_format(`date` + INTERVAL 1 HOUR, '%Y-%m-%d')
order by
`day` asc
我想要/需要做的是:
使用 where 子句查询 products 并添加日期以获取在给定时间段内与这些产品相关的所有 product_metrics 和所有 customer_orders。
【问题讨论】:
-
向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example 尝试在rextester.com 中创建样本
-
将表格和数据发布为文本READ THIS
-
没有数据或期望输出,我们不知道出了什么问题。我的建议是将您的问题简化为
SELECT * FROM Products,然后开始一一添加表格。但我认为你不能和customers同时加入marketplace和product_metrics。这就是为什么你有这么多行。当您将查询更改为SELECT *时,您会看到
标签: mysql laravel laravel-5 eloquent