我正在尝试 - 使用laravel 4来获取一个查询,该查询产生一周中每一天的平均访客/客户数量,例如在给定时间段内的周一,周三,周三等。
我可以使用以下查询在mySql中执行此操作:
SELECT day_of_week, AVG(visitors_sum) average_order FROM
(
SELECT DAYNAME(play_date) day_of_week,
DAYOFWEEK(play_date) day_num,
TO_DAYS(play_date) `date`,
sum(group_size) visitors_sum
FROM reservations
GROUP BY `date`
) temp
GROUP BY day_of_week
ORDER BY day_num
我尝试简单地使用查询执行db :: raw但不起作用。除此之外我无法解决这个问题。我尝试使用以下方法创建子查询:
$average = DB::table('reservations',
DB::raw('DAYNAME(play_date) AS day_of_week,
DAYOFWEEK(play_date) AS day_num,
TO_DAYS(play_date) AS playdate,
sum(group_size) as visitors_sum)'))
->groupBy('day_of_week')
->get();
但是出现了错误未知列'day_of_week'所以我假设流利不能支持groupBy中的别名并且可能是sortby?
那么,我如何重新创建此查询以获得我需要的结果,理想情况是在一次调用中?
任何帮助表示赞赏
由于
答案 0 :(得分:1)
这对您的请求来说有点晚了,但如果这对您仍有帮助,请尝试此操作。我在Laravel流利的时候遇到了非常类似的问题。将所有内容都放入 DB :: select 语句时我遇到的一个问题是我无法将结果上的 - > paginate()方法用作对象没有回来。 此代码将事物保存在DB对象中,允许您对结果使用对象方法,例如 - > paginate(), - > toJson, - > toArray, - > toSql 等。
以下使用的 - > from()方法仅在文档页面上使用ONCE,这是一个模糊的用例,我错过了前10次阅读文档的内容。
$average = DB::table('temp')
->select(DB::Raw('day_of_week, AVG(visitors_sum) average_order'))
->from(DB::Raw('(
SELECT DAYNAME(play_date) day_of_week,
DAYOFWEEK(play_date) day_num,
TO_DAYS(play_date) `date`,
sum(group_size) visitors_sum
FROM reservations
GROUP BY `date`
) temp'))
->groupBy('temp.day_of_week')
->orderBy('temp.day_num')
->toSql();
这是Laravel 4从上面的代码中流畅生成的实际SQL,它在功能上与原始问题中的原始代码完全相同。
string(457) "select day_of_week, AVG(visitors_sum) average_order from (
SELECT DAYNAME(play_date) day_of_week,
DAYOFWEEK(play_date) day_num,
TO_DAYS(play_date) `date`,
sum(group_size) visitors_sum
FROM reservations
GROUP BY `date`
) temp group by `temp`.`day_of_week` order by `temp`.`day_num` asc"
答案 1 :(得分:0)
Yay - 找到了结果。我结束了这个并且可以使用以下相同的结果:
$average = DB::select(
'SELECT day_of_week,
AVG(visitors_sum) average_order
FROM
(
SELECT DAYNAME(play_date) day_of_week,
DAYOFWEEK(play_date) day_num,
TO_DAYS(play_date) `date`,
sum(group_size) visitors_sum
FROM reservations
GROUP BY `date`
) temp
GROUP BY day_of_week
ORDER BY day_num');
这让我得到了我需要的结果。我认为Select
需要一个表,但可以使用原始查询
由于