【发布时间】:2019-02-28 15:26:44
【问题描述】:
我目前正在为我的后端 API 使用 Lumen 5.7。我需要使用左连接从多个表中选择一些字段。 我有以下查询(普通 mysql 查询)
SELECT issue_id,issue_receipt_id, date_format(issue_datetime, '%d-%m-%Y') as issue_datetime,
issue_item,sum(issue_wt) as issue_wt, round(avg(issue_pure),3) as issue_pure,
sum(issue_fine) as issue_fine, sum(issue_cash) as issue_cash,
sum(receipt_wt) as receipt_wt, sum(receipt_fine) as receipt_fine,
pure_name as issue_item_name
FROM item_issues
LEFT JOIN receipt_items ON receipt_id = issue_receipt_id
LEFT JOIN purities ON pure_id = issue_item
group by issue_receipt_id;
我已经尝试过流明,
$receipts = DB::table('item_issues')
->leftJoin('receipt_items', 'receipt_items.receipt_id', '=', 'item_issues.issue_receipt_id')
->leftJoin('purities', 'purities.pure_id', '=', 'item_issues.issue_item')
->select('issue_id', 'issue_receipt_id', DB::raw("date_format(issue_datetime, '%d-%m-%Y') as issue_datetime"), 'issue_item', 'pure_name', DB::raw('sum(issue_wt) as issue_wt'),
DB::raw('round(avg(issue_pure),3) as issue_pure'),
DB::raw('sum(issue_fine) as issue_fine'),
DB::raw('sum(issue_cash) as issue_cash'),
DB::raw('sum(receipt_wt) as receipt_wt'),
DB::raw('sum(receipt_fine) as receipt_fine'))
->groupBy('item_issues.issue_receipt_id', 'item_issues.issue_item')->get();
但它会产生语法错误或访问冲突等错误:1055 SELECT 列表的表达式#1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“item_issues.issue_id”; 但是我必须选择上述字段,如何做到这一点没有问题。而且我试图禁用严格模式,但我不知道在 .env 或其他文件中在哪里禁用此选项。我在流明中找不到 database.config。任何人都可以在这方面提供帮助。
【问题讨论】:
-
您可能正在编写一个没有意义的查询。顺便说一句:普通查询也会在严格模式下引发错误。
-
没有,当我检查 mysql 工作台时,它给出了一个结果
-
因为服务器默认不严格。 Lumen 为单个会话设置严格模式。在 Workbench 中尝试
set session sql_mode = concat('only_full_group_by,', @@sql_mode);,然后执行您的查询。