我正在努力使用 Illuminate 数据库查询构建器进行查询。当我使用查询时,结果与我预期的不同。当直接使用 mysql cli 使用查询日志中的查询时,我得到了预期的结果。
使用查询生成器:
->table('CompanyTools')
->select(
'CompanyTools.toolId',
$db->raw('COUNT(CompanyTools.toolId) as count')
)
->whereYear('CompanyTools.date', '>', 'YEAR(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))')
->groupBy('CompanyTools.toolId')
->orderBy('count', 'DESC')
->take(1)
->get();
结果:
Array ( [toolId] => 88 [count] => 55 )
使用 mysql cli:
select `CompanyTools`.`toolId`, COUNT(CompanyTools.toolId) as count from `CompanyTools`
where year(`CompanyTools`.`date`) > YEAR(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))
group by `CompanyTools`.`toolId`
order by `count` desc
limit 1
结果:
ToolId: 88
count: 17
如果我(在查询生成器中)替换'YEAR(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))'
为2013
我得到:
Array ( [toolId] => 88 [count] => 17 )
不知何故 date_sub 被忽略,因此结果包括所有年份
我试过->whereYear('CompanyTools.date', '>', $db->raw('YEAR(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))'))
没有任何运气。
我想我可以使用 php 来计算所需的年份,但我宁愿得到正确的查询。
提前谢谢
/j
更新
更换
->whereYear('CompanyTools.date', '>', 'YEAR(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))')
和
->where($db->raw('YEAR(CompanyTools.date)'), '>', $db->raw('YEAR(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))'))
解决它。不够聪明,无法弄清楚原因,但也许应该以不同的方式使用 whereYear 函数