我一直试图解决这个问题,这是我的第一个问题was this,它的工作方式正如预期的那样。
问题是我无法选择比groupBy中的列更多的列,所以我找到了一个解决方案:DB::raw('created_at as created_at')
但它让我回答:
SQLSTATE[42000]: Syntax error or access violation: 1055 created_at' isn't in GROUP BY
广告,如果我添加" create_at" groupBy(DB::raw('create_at'))
和"概念"对于groupBy,然后将它们分组,这是我想要避免的。
我的代码是:
@forelse($transaction->where('status', '!=', 'ok')
->select('user_id', 'option_id', 'status', 'concept', DB::raw('created_at as created_at'), DB::raw('concept as concept'))
->groupBy('user_id')
->groupBy('option_id')
->groupBy('status')
->get() as $transaction)
{{$transaction->concept}}
{{$transaction->created_at}}
谢谢:)
答案 0 :(得分:2)
SELECT语句中的每一列也必须在GROUP BY子句中。
在MySQL 5.7.5或更高版本中将 only_full_group_by 模式设置为false会出现异常,但假设所有行的额外列具有相同的值 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
您也可以通过使用技巧获取非分组列的MAX()或MIN()来实现此目的,但除非将它们添加到GROUP BY语句中,否则无法获取每行的实际值
答案 1 :(得分:1)
默认情况下启用Mysql严格模式。禁用严格模式,它将解决您的问题。
在'mysql'
'strict' => true,
为假。
'strict' => false,
答案 2 :(得分:-1)
好吧,多亏了@noufalcep和@Rob Fonseca Rob,我带来了这个解决方案,我认为这发生在第5.4节之后的Laravel中,其中strict设置为true。
所以我没有完全禁用它,而是这样做了:
public class Foo
{
public static void main(String[] args)
{
int x[] = new int[5];
for(int i=0;i<5;i++)
x[i]=i*i;
for(int i=0;i<5;i++)
{
System.out.println("Value # " + (i+1) + " = " + x[i]);
}
}
}
顺便说一句,MAX MIN对我不起作用,它仍然要求将它添加到groupBy中并要求一个数组
我希望这会有助于下一个。
快乐编码