2017-12-14 15 views
2

이 다음 SQL 문은 MySQL의 쿼리에서 작동에서 작동하지만 Laravel에서 다음을 실행하려고 할 때 오류 SQLSTATE[42000]: Syntax error or access violation: 1055 'dashboard.m.id' isn't in GROUP BY (SQL: SELECT m.id, ....을 제공합니다 :Laravel 원시 선택 오류; MySQL의

$this->builder = DB::select 
("SELECT m.id, m.member_num, m.first_name, m.last_name, COUNT(s.member_id) AS members 
FROM sessions AS s 
LEFT JOIN members AS m ON s.member_id = m.id 
WHERE s.created_at >= :dateFrom 
AND s.created_at < :dateTo 
GROUP BY s.member_id",    
['dateFrom' => "date('2017-11-01')", 
'dateTo' => "date('2017-12-01')"]); 

사람이이 MySQL의에서 제대로 작동 고려하여 문제를 볼 수 있습니다.

단순히 sessions의 수를 얻을 당신이 Laravel에보고 된 오류가 함께 할 수있다 sessions

답변

2

member_id로 링크 된 member 세부 사항을 표시하기 위해 노력하고있어 당신은 비 집계 열을 선택하는 GROUP BY 절에 나타나지 않습니다. MySQL에서 작동 한 이유는 분명히 MySQL이 ONLY_FULL_GROUP_BY이 꺼져있는 느슨한 모드에서 실행되고 있기 때문에 비표준 구문을 허용하기 때문입니다. 나는 당신이이 라인을 따라 쿼리를 사용하도록 생각 : 당신이 sessions 테이블의 회원을 통해 집계하고, 해당 테이블에서만 필드를 계산하기 때문에

SELECT 
    m.id, m.member_num, m.first_name, m.last_name, s.member_count 
FROM members m 
LEFT JOIN 
(
    SELECT member_id, COUNT(*) AS member_count 
    FROM sessions 
    WHERE s.created_at >= :dateFrom AND 
      s.created_at < :dateTo 
    GROUP BY member_id 
) s 
    ON m.id = s.member_id 

, 나는 별도의 하위 쿼리에 집계를 할 것을 제안 . 그런 다음 members에 가입하면 전체 구성원 레코드를 검색 할 수 있습니다.

+0

빠른 답변 주셔서 감사합니다. 쿼리가 삭제되었으며 현재 작동하지만 member_count는 모두 null입니까? – yoyoma

+0

흠 ... 하위 쿼리'SELECT member_id, COUNT (*) ...'만 실행해볼 수 있습니까? 그게 뭐야? 'member_count'가 모두 'NULL'로 돌아 오면 데이터에 문제가 있음을 의미합니다. –

+0

또 다른 생각 :이 결과 세트의 _order_를 어떻게 계획합니까? 처음으로 되돌아온 몇 가지 기록에는 아무런 가치가없는 경우도있을 수 있습니다. 아마도 'ORDER BY' 절도 있어야합니다. –

0

ONLY_FULL_GROUP_BYissue을 극복하려면 ANY_VALUE()을 사용하여 비 집합 열을 나타낼 수 있습니다.

DB::table('sessions') 
    ->join('members', 'sessions.member_id', '=', 'members.id') 
    ->select([ 
     'members.member_num', 
     'members.first_name' 
     'members.last_name', 
     DB::raw('COUNT(sessions.member_id) AS members'), 
     DB::raw('ANY_VALUE(members.id) AS id'), 
    ]) 
    ->where([ 
     ['sessions.created_at', '>=', date('2017-11-01')], 
     ['sessions.created_at', '<', date('2017-12-01')] 
    ]) 
    ->groupBy('sessions.member_id') 
    ->get(); 
+0

응답 해 주셔서 감사 드리며 신속하게 답변을 드리며 'ANY_VALUE does not exist' 오류가 발생했습니다. – yoyoma